gpt4 book ai didi

c - 将 Little Endian 十六进制转储输出转换为 Big Endian 时出现问题(C 编程)

转载 作者:行者123 更新时间:2023-11-30 16:32:03 24 4
gpt4 key购买 nike

我正在努力解决一个问题,该问题需要我对使用函数 fopen() 创建的目标文件执行十六进制转储。

我已经声明了必要的整数变量(以十六进制形式),如下所示:

//Declare variables
int code = 0xCADE;

输出必须是大端字节序,因此我以这种方式交换了字节:

//Swap bytes
int swapped = (code>>8) | (code<<8);

然后我以这种方式打开文件进行二进制输出:

//Open file for binary writing
FILE *dest_file = fopen(filename, "wb");

然后,我使用 fwrite() 按以下方式将变量代码(对应于 16 位字)写入文件:

//Write out first word of header (0xCADE) to file
fwrite(&swapped, sizeof(int), 1, dest_file);

编译、运行并对写入内容的文件执行十六进制转储后,我观察到以下输出:

0000000 ca de ca 00                                    
0000004

基本上一切都是正确的,直到额外的“ca 00”。我不确定为什么它会在那里,需要将其删除,以便我的输出只是:

0000000 ca de                                    
0000004

我知道字节顺序问题已在堆栈上得到广泛解决,但在执行搜索后,我不清楚如何对这个问题进行分类。我该如何解决这个问题以便删除“ca 00”?

非常感谢。

编辑:

我已经更改了两者:

 //Declare variables
int code = 0xCADE;

//Swap bytes
int swapped = (code>>8) | (code<<8);

至:

//Declare variables
unsigned short int code = 0xCADE;

//Swap bytes
unsigned short int swapped = (code>>8) | (code<<8);

我观察到:

0000000 ca de 00 00                                    
0000004

这让我更接近我需要的东西,但仍然有额外的“00 00”。如有任何帮助,我们将不胜感激!

最佳答案

您正在告诉 fwrite 写入 sizeof(int) 字节,在您的系统上计算结果为 4 个字节(int 的大小为4).如果你想写两个字节,只需这样做:

fwrite(&swapped, 2, 1, dest_file);

关于c - 将 Little Endian 十六进制转储输出转换为 Big Endian 时出现问题(C 编程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50319423/

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