【发布时间】:2010-09-30 19:49:46
【问题描述】:
我正在尝试将 struct 转换为 char 数组以通过网络发送。但是,当我这样做时,我会从 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;
}
这是 a.x 的各种值的输出(在使用 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
我是在转换过程中忘记做某事,还是忘记了有关整数表示的事情?
*注意:这只是一个小测试程序。在一个真正的程序中,我有更多的结构,更好的变量名,并且我转换为小端。
*编辑:格式化
【问题讨论】: