【发布时间】:2017-03-31 05:21:45
【问题描述】:
所以我有非常大的.bin 文件,其中写有bytes。他们有96-bit 数字写在其中two's complement 数字(仍然没有ASCII,只有字节)。现在我必须编写一个汇编程序来对这些文件中的数字进行排序并将其保存到另一个文件中(不要问为什么,assembly 类)。我已经为带有32k 数字的文件完成了它,如下所示:
./main < inSort32Kx96b.bin > XD.bin
diff outSort32Kx96b.bin XD.bin
文件outSort32Kx96b.bin是我的老师给我的。所以现在diff 不输出任何东西,它们是相同的(我可以用hexdump 或mcview 来检查)。但我得到了另一个文件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
?
【问题讨论】:
-
我刚刚说过,我很确定,因为它适用于更大数量的数字,为什么会在这里崩溃:D
-
我完全不明白为什么你的 96 位数字、程序集、庞大的文件和屏幕截图如此复杂的问题,而在一天结束时你只是想要询问如何在 linux 中进行十六进制转储,在这种情况下,只需在谷歌上搜索“linux hex dump”就会产生大量结果。
-
当我们谈到“hexdump”时,我们并不是指“在支持 hexdump 视图的编辑器中打开”。我们的意思是“通过一个程序管道它,该程序将为您提供包含原始文件的十六进制转储的新文本文件”。所以,这个想法很简单:如果你不能在 linux 中轻松比较两个二进制文件,(甚至可能有办法做到这一点,但假设没有,)那么你需要做的就是让每个二进制文件十六进制转储到文本文件中,然后在文本文件上运行 ascii diff。
-
我认为你没有正确理解迈克。这样做:
hexdump file1.bin > file1.dat; hexdump file2.bin > file2.dat; diff file1.dat file2.dat