2
我正在使用使用結構來表示數組(並允許在訪問結構時填充該數組)的API。以十六進制打印數組與整數
如果數據是一個結構對象,並且方向是uint32_t的,運行以下:
printf("0x%08X", data->magic);
我得到的值:0xAAAABEEF
在打印陣列直接作爲例如:
printf("0x");
for (int i = 0; i < size; ++i) {
printf("%02X", payload[i]);
}
我得到的值:0xEFBEAAAA
結構定義如下所示:
struct Data {
uint32_t magic;
} __attribute__((packed));
我相信數據變量聲明是這樣的:
// Declared and initialized somewhat like this:
uint8_t payload[kMaxSize];
Data* data = reinterpret_cast<Data*>(payload);
data->magic = 0xAAAABEEF;
我很好奇,爲什麼printf的不返回相同的值。是否因爲機器將數據存儲爲LSB(最低有效字節)?
非常感謝!如果這是一個微不足道的問題,表示歉意;我對我的理解深感懷疑 - 謝謝你的明確解釋。 – Jary