我有以下代碼:大端和小端的問題
// 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陣列是一個unsigned int數組,它是一個結構的一部分。後來在我的代碼這個數組轉換爲大端格式:
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,但事實並非如此。它將datastores.cmtDatastores.u32Region[0]
(大端)中的數字加到數字1(小端)上。
我想我必須在每個循環的開始時回到little endian,但它似乎應該有一個更簡單的方法來做到這一點。
有什麼想法?
感謝,
鮑比