[英]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.