我想與一個結構和一個uint64_t進行聯合,所以我可以引用單個uint16_ts與結構,並將它們串聯在uint64_t中。我在此測試程序:結構和整數的內存順序
#include "stdio.h"
#include "stdint.h"
struct test_struct{
uint16_t stuff;
uint16_t a;
uint16_t b;
uint16_t c;
};
union test_union{
struct test_struct str;
uint64_t uint;
};
int main(){
struct test_struct x = {
.stuff = 0x0000,
.a = 0x1234,
.b = 0x5678,
.c = 0x9ABC
};
union test_union y;
y.str = x;
printf("y.uint: %llX\n", y.uint);
}
輸出成爲:
y.uint: 9ABC567812340000
其是反直覺的,我(它是768,16 000ABC,或123456789ABC)。有人可以向我解釋爲什麼結構中的元素似乎被顛倒了嗎?
編輯: 供將來參考:字節順序的答案讓我感到困惑,因爲uint16_ts是按照正確的順序打印的。但是,這當然是因爲它們本身存儲的是小端。