gpt4 book ai didi

linux - 比较大文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:40:41 26 4
gpt4 key购买 nike

所以我有非常大的 .bin 文件,其中写入了 bytes。它们将 96 位 数字写入其中作为 two's complement 数字(仍然没有 ASCII,只有字节)。现在我必须编写一个汇编程序来对这个文件中的数字进行排序并将其保存到另一个文件中(不要问为什么,assembly 类)。我已经为一个带有 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 给出了这两个文件不同的字节数。现在我可以看出区别了:

enter image description here

所以差异出现在 0x000017C0。那我现在不知道了。如果将它们写成two's complement numbers in little endian order,那么哪个更大,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

?

最佳答案

hexdump 以大端顺序显示单个字节。如果必须将一堆字节解释为数字,则只需颠倒字节顺序即可。

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

可以看到第一个数字比较大。

“补码”不是一个很明确的表达方式。更好的是“有符号整数”。表示数字是正数还是负数的符号是​​数字的第一位。该位可以在大端序号的开头和小端序号的末尾找到。

正面:

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

关于linux - 比较大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43132992/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com