我对 C 函数 fwrite
有一个“有趣”的问题。我有一个 unsigned int
指针,我想将它写入二进制文件,所以我使用了 fwrite
。但是文件中的字节是倒写的。考虑到 unsigned int
的大小(在我的例子中是 4 个字节),例如,如果我的数据是 FE 45 78 D4 4C E9 EA F1
等,我会看到文件内容如 D4 78 45 FE F1 EA E9 4C
等。我该如何解决这个问题?
更多信息:当我说字节顺序错误时,我的意思是我用来读取文件的每个程序都以错误的顺序看到字节,当然会带来读取错误......我不明白为什么只有 fwrite函数使用不同的方式来表示数据...
更多信息:
我试过了
fwrite(myuipointer,4,size,file);
fwrite(myuipointer,1,size*4,file);
同样的结果。 我还尝试使用指向我的数据的无符号字符指针并将其写入,但没有成功...
最佳答案
这是因为您的计算机使用小端 存储语义。这意味着数字的小端在前。您习惯于看到数字的大端在前(例如 340,000
,其中千位列在十位列之前。)
如果您的数据永远不会在 big endian 系统(例如旧的 PowerPC Mac)上读取,那么您可以用这种方式写出您的数字,它们会在同一系统上读回它们,并且你会得到正确排序的。
如果您希望此数据在使用不同字节序的系统之间共享,您必须选择一个字节顺序,坚持使用它,并在写入文件时执行与该字节顺序的转换。 (由于您不知道字节顺序的概念,我怀疑这对您不起作用。)
关于c - 为什么字节是颠倒的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11446601/