比较大文件

Comparing big files

所以我有非常大的 .bin 文件,其中写有 bytes。他们有 96-bit 数字写成 two's complement 数字(仍然没有 ASCII,只有字节)。现在我必须编写一个汇编程序来对这个文件中的数字进行排序并将其保存到另一个文件中(不要问为什么,assemblyclass)。我已经为具有 32k 个数字的文件完成了此操作,如下所示:

./main < inSort32Kx96b.bin > XD.bin
diff outSort32Kx96b.bin XD.bin

文件outSort32Kx96b.bin是老师给我的。所以现在 diff 不输出任何东西,它们是相同的(我可以用 hexdumpmcview 来检查)。但是我得到了另一个文件 inSort1Kx96b.bin。我也对它进行排序。但随后 diff 说:

Binary files outSort1Kx96b.bin and XD.bin differ

@编辑:

cmp 给出了这两个文件不同的字节数。现在我可以看出区别了:

所以区别出现在0x000017C0。那我现在不知道了。如果按little endian顺序写成two's complement个数,那么哪个大,f.e

00 00 00 00  00 00 00 81  00 00 00 00

00 00 00 00  00 00 00 7F  00 00 00 00

?

十六进制转储以大端顺序显示单个字节。如果一堆字节必须解释为数字,只有字节顺序颠倒了。

little endian                           big endian (C notation)
AB CD EF                              = 0xEFCDAB
01 02 03 04  05 06 07 08  09 10 11 12 = 0x121110090807060504030201

让我们将您的示例转换为大端顺序:

0x000000008100000000000000
0x000000007F00000000000000

可以看到第一个数比较大

"Two's complement number" 不是很清楚的表达。更好的是"signed integer"。表示数字是正数还是负数的符号是​​数字的第一位。该位可以在大端序号的开头和小端序号的末尾找到。

正:

00 00 00 00  00 00 00 81  00 00 00 00 = 0x000000008100000000000000
00 00 00 00  00 00 00 81  00 00 00 10 = 0x100000008100000000000000
00 00 00 00  00 00 00 81  00 00 00 7F = 0x7F0000008100000000000000

负数:

00 00 00 00  00 00 00 81  00 00 00 80 = 0x800000008100000000000000
00 00 00 00  00 00 00 81  00 00 00 CD = 0xCD0000008100000000000000
00 00 00 00  00 00 00 81  00 00 00 F0 = 0xF00000008100000000000000