gpt4 book ai didi

c - 将二进制结构写入文件,意外结果?

转载 作者:行者123 更新时间:2023-12-03 23:27:10 24 4
gpt4 key购买 nike

我正在尝试将打包数据结构写入二进制文件,但是正如您从 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

最佳答案

od -x将输入分组为 2 字节单元并交换它们的字节序。这是一种令人困惑的输出格式。使用 -t x1单独留下字节。

$ od -t x1 temp.bin
0000000 61 a5 a5 00 00 62 ff 00
0000010

或者,更容易记住,使用 hd (十六进制转储)而不是 od (八进制转储)。 hd的默认格式不需要调整,而且它同时显示了十六进制和 ASCII 转储。
$ hd temp.bin
00000000 61 a5 a5 00 00 62 ff 00 |a....b..|
00000008

关于c - 将二进制结构写入文件,意外结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62158286/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com