2017-08-07 20 views
2

作为使用二进制和ASCII格式进行练习的一部分,我使用C程序将整数49写入文件。二进制,其4个字节表示是文本编辑器中的反向排列顺序

00000000 00000000 00000000 00110001

在ASCII,前3个字节是空字节(显示为^@),和最后一个字节是字符1。当我在vim中打开它时,我期望看到三个空字节,然后是1。相反,我看到它是相反的,即1后跟三个空字节。为什么这样?

回答

2

这似乎是你的平台是小端(所有x86是小端)存储字节从低到高,所以49在内存中存储为

00110001 00000000 00000000 00000000 

,而不是你所期望的。


如果你想在你期望你需要使用使用htonl() function大端(又名网络字节顺序)将其保存的格式来显示它。

+0

当我通过C代码读取整数时,无论存储器的字节顺序和布局如何,它都能正确读回49。我想当一个文本编辑器读取它时,它只是显示内存中的字节并且不知道字节顺序。 – jitihsk

+1

不完全。如果你想在不同的endiannes机器上读取你的整数,你会得到不同的结果。这就是为什么有定义的网络字节顺序,所以它可以在架构之间进行互操作。 – Hauleth