Linux 比较大文件
所以我有很大的Linux 比较大文件,linux,file,assembly,diff,Linux,File,Assembly,Diff,所以我有很大的.bin文件,里面有字节。它们有96位数字作为two的补码写入(仍然没有ASCII码,只有字节)。现在我必须编写一个汇编程序来对这些文件中的数字进行排序,并将其保存到另一个文件中(不要问为什么,assemblyclass)。我对一个编号为32k的文件执行了此操作,如下所示: ./main < inSort32Kx96b.bin > XD.bin diff outSort32Kx96b.bin XD.bin @编辑: cmp给出了这两个文件不同的字节数。现在我看到了区别
.bin
文件,里面有字节。它们有96位
数字作为two的补码写入(仍然没有ASCII码,只有字节)。现在我必须编写一个汇编程序来对这些文件中的数字进行排序,并将其保存到另一个文件中(不要问为什么,assembly
class)。我对一个编号为32k的文件执行了此操作,如下所示:
./main < inSort32Kx96b.bin > XD.bin
diff outSort32Kx96b.bin XD.bin
@编辑:
cmp
给出了这两个文件不同的字节数。现在我看到了区别:
因此差异出现在0x000017C0
中。那我现在不知道了。如果它们被写成两个补码,以小尾数的顺序排列,那么哪一个更大
00 00 00 00 00 00 00 81 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
让我们将您的示例转换为big endian顺序:
0x000000008100000000000000
0x000000007F00000000000000
你可以看到第一个数字更大
“二补数”不是一个很清楚的表达。更好的是“有符号整数”。表示数字是正还是负的符号是数字的第一位。这个位元可以在一个大端数的Beginning和一个小端数的末尾找到
阳性:
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
否定:
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上使用&您也可以在hd
的输出上使用。不要那么肯定你的程序是好的。我刚才说过我肯定,因为它适用于更大数量的数字,为什么它会在这里崩溃:我完全不明白为什么你的96位数字,你的程序集,以及大量的文件和屏幕截图会有如此复杂的问题,当一天结束时,你只想问如何在linux中进行十六进制转储,在这种情况下,只需在谷歌上搜索“linux十六进制转储”就会产生大量结果。当我们提到“hexdump”时,我们不是指“在支持hexdump视图的编辑器中打开”。我们的意思是“通过一个程序将其导入,该程序将为您提供包含原始文件十六进制转储的新文本文件”。所以,这个想法很简单:如果你无法在linux中轻松比较两个二进制文件(虽然可能有方法可以做到,但假设没有),那么你所需要做的就是将每个二进制文件转储到一个文本文件中,然后在文本文件上运行ascii差异。我认为你没有正确理解Mike。执行此操作:hextumpfile1.bin>file1.dat;hextump file2.bin>file2.dat;diff file1.dat file2.dat