Я хочу создать союз с struct и и uint64_t, поэтому я могу ссылаться на отдельные uint16_ts на struct и объединить их в uint64_t. Я сделал эту тестовую программу:порядок памяти structs и ints
#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
, который является нелогичным для меня (это будет Шоуда 000ABC или 123456789ABC). Может кто-нибудь объяснить мне, почему элементы в структуре кажутся обратными?
EDIT: Для справок в будущем: ответы на вопросы, принятые на континент, меня смутили, потому что uint16_ts были напечатаны в правильном порядке. Но это, конечно, потому, что они сами хранятся малоподобными.