我試圖將dword轉換爲4字節的數組。 當我這樣做,字節似乎我的理解是一個DWORD等於在小尾數系統0x11223344會像這前後翻頁(更改端)在將dword轉換爲byte [4](endianity swap?)時出現意外結果
:
0000_1011___0001_0110___0010_0001____0010_1100
但是當我做這樣的:
typedef unsigned long dword;
typedef unsigned char byte;
int main(void)
{
dword a = 0x11223344;
byte b[4];
memcpy(b, &a, 4);
printf("%x %x %x %x\n", b[0], b[1], b[2], b[3]);
}
我得到。
我預計它是。
同樣的事情發生在我的reinterpret_cast使用或
union
{
dword a;
byte b[4];
} foo;
即時猜測我錯了,而不是編譯器/處理器,但我缺少的是在這裏嗎? 此外,如何看待大endian系統?
編輯: 所以我想我對小端系統的理解是錯誤的。 另一個問題:在仍然可移植的情況下,速度會更快:使用移位來獲取單個字節值或使用memcpy/reinterpret_cast,然後使用htonl()/ ntohl()?
號碼存儲從一點小端(最低顯著年底)開始 - 印第安系統。 – avakar
你甚至沒有讀過http://en.wikipedia.org/wiki/Endianness,是嗎?除此之外,在轉換爲二進制文件時,您將十六進制數視爲字節式小數...... –
簡短回答:不要這樣做。或者使用適當的移位從原始字節組裝自己的值,或者使用'ntols()'(注意:不提供standard-lib)之類的運行時函數。 – WhozCraig