構造体と 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
これは直感に反します (0000123456789ABC または 123456789ABC のはずです)。構造体の要素が逆になっているように見える理由を誰かに説明してもらえますか?
編集:将来の参考のために:uint16_tsが正しい順序で印刷されたため、エンディアンの回答は私を混乱させました。しかし、これはもちろん、それら自体がリトルエンディアンで格納されているためです。