繁体   English   中英

C-将结构解构为char数组

[英]C - deconstructing a struct into char array

为什么下面的代码产生

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上运行。 目的是通过串行线路发送char数组(如果相关)。

您的代码依赖于实现定义的行为,因此,如果不知道运行它的系统的详细信息,就无法预测将要看到的内容:

  • struct ztest大小可能包括填充
  • char可以是已签名或未签名
  • uint16_t字节可以大端或小端形式存储

看来您的系统向struct ztest添加了一个填充字节,使用带符号的char ,并将uint16_t的最高有效字节存储在较低的地址。

从填充字节开始, 0x17的值是“垃圾”。 0x88的值将进行符号扩展以作为有符号的int打印,从而导致0xFFFFFF88打印输出。

ztest结构的大小为4。它具有一个无符号字符,一个填充字节和两个short字节。 因此,当尝试显示dd[1]时,实际上是未定义的行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM