У меня есть следующий код:
// 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 на другой компьютер, который распаковывает эти данные.
Первый цикл работает нормально.После этого, поскольку данные в формате с прямым порядком байтов, когда я "увеличиваю", "уменьшаю" и "переключаюсь", значения неверны.Очевидно, что если в первом цикле datastores.cmtDatastores.u32Region[0] += 1;
приводит к 1, то во втором цикле это должно быть 2, но это не так.Это прибавление числа 1 (little-endian) к числу в datastores.cmtDatastores.u32Region[0]
(big endian).
Я полагаю, мне нужно вернуться к little-endian в начале каждого цикла, но, похоже, чтобыть более простым способом сделать это.
Есть мысли?
Спасибо,
Бобби