Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 比较大文件_Linux_File_Assembly_Diff - Fatal编程技术网

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