因此。我一直在尝试使用fwrite()。
在我的系统sizeof(int)= 4上。 我有一个包含的数组:1,2,3,4,5和6。
当我将它写入二进制文件并使用hexdump查看时,我得到:
0000000 0001 0000 0002 0000 0003 0000 0004 0000
0000010 0005 0000 0006 0000
0000018
它是否在4字节值之间写入零?
答案 0 :(得分:4)
因为1(例如)表示为4字节十六进制是00000001
。显然你在little-endian系统上,因此当你检查文件时显然是从前到后的顺序。
答案 1 :(得分:3)
您的hexdump将两个字节分组为一个单词并更改字节顺序。在大多数系统上,使用hexdump -C
将转储更改为规范视图,从而阻止分组。在十六进制中,一个字符代表一个nybble,每个字节有两个nybbles。所以你的4字节int
总共应该有8个nybbles。由于你的数字很小,你的大部分都是0。
答案 2 :(得分:2)
我认为你误解了输出中有多大字节--8位需要完全表示两个十六进制数字。您示例中的一个int
是:
0001 0000
您可能希望显示为32位数据(或8位数据)而不是16.这就是使您的转储看起来很奇怪的原因。
我复制了您的二进制文件,并使用几个不同的选项运行od
。希望你找到启发的例子:
$ od -t x4 example
0000000 00000001 00000002 00000003 00000004
0000020 00000005 00000006
0000030
$ od -t x2 example
0000000 0001 0000 0002 0000 0003 0000 0004 0000
0000020 0005 0000 0006 0000
0000030
$ od -t x1 example
0000000 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00
0000020 05 00 00 00 06 00 00 00
0000030
正如你可以从1字节和4字节的例子中看到的最好,我也像你一样在小端机器上。