Big and Little endian question

Posted by Bobby on Stack Overflow See other posts from Stack Overflow or by Bobby
Published on 2010-04-06T19:31:06Z Indexed on 2010/04/06 19:33 UTC
Read the original article Hit count: 562

Filed under:
|

I have the following code:

    // Incrementer
    datastores.cmtDatastores.u32Region[0] += 1;

    // Decrementer
    datastores.cmtDatastores.u32Region[1] = (datastores.cmtDatastores.u32Region[1] == 0) ? 
        10 : datastores.cmtDatastores.u32Region[1] - 1;

    // Toggler
    datastores.cmtDatastores.u32Region[2] = 
        (datastores.cmtDatastores.u32Region[2] == 0x0000) ? 
        0xFFFF : 0x0000;

The u32Region array is an unsigned int array that is part of a struct. Later in the code I convert this array to Big endian format:

unsigned long  *swapL = (unsigned long*)&datastores.cmtDatastores.u32Region[50];
for (int i=0;i<50;i++) 
{
   swapL[i] = _byteswap_ulong(swapL[i]);
}

This entire code snippet is part of a loop that repeats indefinitely. It is a contrived program that increments one element, decrements another and toggles a third element. The array is then sent via TCP to another machine that unpacks this data.

The first loop works fine. After that, since the data is in big endian format, when I "increment", "decrement", and "toggle", the values are incorrect. Obviously, if in the first loop datastores.cmtDatastores.u32Region[0] += 1; results in 1, the second loop it should be 2, but it's not. It is adding the number 1(little endian) to the number in datastores.cmtDatastores.u32Region[0](big endian).

I guess I have to revert back to little endian at the start of every loop, but it appears there should be an easier way to do this.

Any thoughts?

Thanks,

Bobby

© Stack Overflow or respective owner

Related posts about c++

Related posts about endianness