gpt4 book ai didi

c - 将数字作为原始二进制文件写入文件

转载 作者:太空宇宙 更新时间:2023-11-04 05:35:27 26 4
gpt4 key购买 nike

所以我尝试将 long 的值作为原始二进制文件写入带有 fwrite() 的文件,这是一个测试文件:

#include<stdio.h>
int main() {
FILE* stream;
stream = fopen("write", "wb");
long number = 0xfff;
fwrite(&number, sizeof(long), 1, stream);
}

在文本编辑器中打开写入的文件时,这是输出:

ff0f 0000 0000 0000 

虽然我期待的是 0000 0000 0000 0fff

如何将所需结果正确写入原始二进制文件?

最佳答案

了解 Endianness ,它说明了字节在计算机系统中如何排列在一个字(或双字/四字等)中。

我假设您已经在 little-endian 的 X86 系统上编写和编译了这个示例,因此,最低有效位优先。与此相反的安排称为 big-endian

现在,很明显,您在本练习中的目标是编码(或pickle,具体取决于您喜欢的术语)一些字节,以便稍后检索,可能是由另一个程序。

如果您开发了一个程序,它使用 fread() 并以相同的方式读取数据(使用 sizeof(long) 这样您就不会读取太多数据)并且在具有相同字节顺序的机器中,它会神奇地起作用,你期望的数字会回来。但是,如果您在具有相反字节顺序的机器上编译并运行“读取”工具,读取相同的输入文件,您的数字将出现乱码。

如果您的目标是编码数据,您最好使用一个工具来帮助您以不可知字节序的方式编码字节,也就是说,一个库可以帮助您获得正确顺序的数据。有一些图书馆可以为您处理这些事情。

关于c - 将数字作为原始二进制文件写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39471415/

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