我正在尝试将紧凑的数据结构写入二进制文件,但是如下的od -x
所示,结果的排序不符合预期。我在64位Intel系统上使用gcc。有人知道为什么排序错误吗?它看起来不像是字节序问题。
#include <stdio.h>
#include <stdlib.h>
struct B {
char a;
int b;
char c;
short d;
} __attribute__ ((packed));
int main(int argc, char *argv[])
{
FILE *fp;
fp = fopen("temp.bin", "w");
struct B b = {'a', 0xA5A5, 'b', 0xFF};
if (fwrite(&b, sizeof(b), 1, fp) != 1)
printf("Error fwrite\n");
exit(0);
}
ASCII 61 是 'a'
,所以成员 b.a
。ASCII 62 是'b'
,所以成员 b.c
。很奇怪的是 0xA5A5
在序列中分散出现。
$ od -x temp.bin
0000000 a561 00a5 6200 00ff
0000010
a561 00a5
并将其转换为00a5 a561
,第二组也是同样的处理方式。 - jiveturkeyod -t xC
。 - Daniel Walkerod
的输出格式[以16位整数分组并具有字节序]。尝试使用od -A x -t x1z -v temp.bin
命令获取000000 61 a5 a5 00 00 62 ff 00 >a....b..< 000008
。 - Craig Estey