У меня такой код:
// 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;
Массив u32Region - это массив int без знака, который является частью структуры. Позже в коде я конвертирую этот массив в формат Big endian:
unsigned long *swapL = (unsigned long*)&datastores.cmtDatastores.u32Region[50];
for (int i=0;i<50;i++)
{
swapL[i] = _byteswap_ulong(swapL[i]);
}
Весь этот фрагмент кода является частью цикла, который повторяется бесконечно. Это надуманная программа, которая увеличивает один элемент, уменьшает другой и переключает третий элемент. Затем массив отправляется через TCP на другой компьютер, который распаковывает эти данные.
Первый цикл работает нормально. После этого, поскольку данные находятся в формате big endian, когда я «увеличиваю», «уменьшаю» и «переключаю», значения неверны. Очевидно, если в первом цикле datastores.cmtDatastores.u32Region[0] += 1;
результат 1, то во втором цикле должно быть 2, но это не так. Он добавляет число 1 (прямой порядок байтов) к числу в datastores.cmtDatastores.u32Region[0]
(прямой порядок байтов).
Я предполагаю, что мне нужно вернуться к маленькому порядку байтов в начале каждого цикла, но, похоже, должен быть более простой способ сделать это.
Есть предположения?
Спасибо,
Бобби