我试图将一个结构转换为一个字符数组通过网络发送。但是,当我这样做时,我从char数组中得到了一些奇怪的输出。
#include <stdio.h>
struct x
{
int x;
} __attribute__((packed));
int main()
{
struct x a;
a.x=127;
char *b = (char *)&a;
int i;
for (i=0; i<4; i++)
printf("%02x ", b[i]);
printf("\n");
for (i=0; i<4; i++)
printf("%d ", b[i]);
printf("\n");
return 0;
}
这里是ax的各种值的输出(在使用gcc的X86上): 127: 7f 00 00 00 127 0 0 0
128: ffffff80 00 00 00 -128 0 0 0
255: ffffffff 00 00 00 -1 0 0 0
256: 00 01 00 00 0 1 0 0
我理解127和256的值,但为什么数字在128时会改变?为什么它不会是:80 00 00 00 128 0 0 0
发布于 2018-05-28 09:52:39
printf("%02hhx", b[i]);
发布于 2018-05-28 11:02:20
for (i=0; i<4; i++)
printf("%02x ", (unsigned char)b[i]);
或者,可以unsigned char*
从一开始就使用:
unsigned char *b = (unsigned char *)&a;
然后,当使用printf打印时,不需要任何投射。
https://stackoverflow.com/questions/-100000093
复制相似问题