我正在尝试将结构转换为 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;
}
这是各种 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
我是在转换过程中忘记做某事,还是忘记了有关整数表示的事情?
*注意:这只是一个小测试程序。在一个真正的程序中,我有更多的结构,更好的变量名,并且我转换为小端。
*编辑:格式化