gpt4 book ai didi

C - 将结构解构为 char 数组

转载 作者:太空宇宙 更新时间:2023-11-04 01:47:39 24 4
gpt4 key购买 nike

为什么下面的代码会产生

09 17 13 FFFFFF88

我希望看到的地方

09 13 88

下面的代码

struct ztest
{
uint8_t a;
uint16_t b;
};

struct ztest zt;
char * dd = (char *) &zt;
zt.a = 9;
zt.b = 5000;
for (i = 0; i < sizeof(zt); i++) {
printf("%02X ",dd[i]);
}

这是在 openwrt 系统 ar71xx 上运行的。目的是通过串行线路发送字符数组(以防相关)。

最佳答案

您的代码依赖于实现定义的行为,因此如果不知道运行它的系统的具体情况,就无法预测您将看到什么:

  • struct ztest 的大小可能包括填充
  • char 可以是有符号的或无符号的
  • uint16_t 的字节可能以大端或小端形式存储

您的系统似乎向 struct ztest 添加了一个字节的填充,使用带符号的 char,并存储 uint16_t 最重要的较低地址的字节。

0x17 的值是填充字节中的“垃圾”。 0x88 的值被符号扩展以打印为带符号的 int,从而产生 0xFFFFFF88 打印输出。

关于C - 将结构解构为 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50451241/

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