c - 为什么字节是颠倒的?

标签 c byte

我对 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/

相关文章:

c - Printf 只打印字符串中的第一个单词?

c# - 将字符串元素转换为字节

c - C中通过http POST发送二进制数据

c - 避免在函数调用中从 volatile static uint8_t 转换为 uint8_t?

c - C 中括号内使用逗号分隔值的赋值

java - 哈希字符串的字节转换,java 与 python

swift - 没有 Debug模式 UnsafePointer withMemoryRebound 会给出错误的值

objective-c - 如何在 objective-c 中反转 NSInteger 或 NSUInteger 的字节顺序

Android:字节分配内存不足(android.graphics.Bitmap)

c - C中的内存泄漏