gpt4 book ai didi

c - 结构和整数的内存顺序

转载 作者:行者123 更新时间:2023-12-02 07:37:00 25 4
gpt4 key购买 nike

我想与一个结构和一个 uint64_t 建立 union ,这样我就可以用该结构引用单个 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 是以正确的顺序打印的。但这当然是因为它们本身是小端存储的。

最佳答案

您在一个小端平台上,最先存储的字节(具有最低地址)结束于组合 uint64_t 的最低有效位(打印时位于右侧)。

如果您在大端平台上运行相同的代码,您会得到预期的结果。您的代码不能跨具有不同字节顺序的系统移植。

关于c - 结构和整数的内存顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15339972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com