2
作为使用二进制和ASCII格式进行练习的一部分,我使用C程序将整数49写入文件。二进制,其4个字节表示是文本编辑器中的反向排列顺序
00000000 00000000 00000000 00110001
在ASCII,前3个字节是空字节(显示为^@
),和最后一个字节是字符1
。当我在vim中打开它时,我期望看到三个空字节,然后是1
。相反,我看到它是相反的,即1
后跟三个空字节。为什么这样?
作为使用二进制和ASCII格式进行练习的一部分,我使用C程序将整数49写入文件。二进制,其4个字节表示是文本编辑器中的反向排列顺序
00000000 00000000 00000000 00110001
在ASCII,前3个字节是空字节(显示为^@
),和最后一个字节是字符1
。当我在vim中打开它时,我期望看到三个空字节,然后是1
。相反,我看到它是相反的,即1
后跟三个空字节。为什么这样?
这似乎是你的平台是小端(所有x86是小端)存储字节从低到高,所以49
在内存中存储为
00110001 00000000 00000000 00000000
,而不是你所期望的。
如果你想在你期望你需要使用使用htonl()
function大端(又名网络字节顺序)将其保存的格式来显示它。
当我通过C代码读取整数时,无论存储器的字节顺序和布局如何,它都能正确读回49。我想当一个文本编辑器读取它时,它只是显示内存中的字节并且不知道字节顺序。 – jitihsk
不完全。如果你想在不同的endiannes机器上读取你的整数,你会得到不同的结果。这就是为什么有定义的网络字节顺序,所以它可以在架构之间进行互操作。 – Hauleth