将文件的二进制输出到文本编辑器

将文件的二进制输出到文本编辑器

我读到您可以使用终端命令xxd -b来查看文件的二进制文件。我使用了这个命令,它确实显示了二进制文件,但在左侧列出了非二进制文件作为行号,在右侧列出了非二进制文件。我想在计算机读取文件时简单地读取文件的二进制文件,将该二进制文件输出到文本编辑器,然后从文本编辑器返回二进制文件。有什么建议么?使用 AppleScript 可以完成类似的事情吗?

答案1

我想在计算机读取文件时简单地读取文件的二进制文件......

这实际上是不可能的。计算机在某个地方将其读取为两个不同的电压电平,您当然看不到。我想对于一台速度慢得多的计算机(不是当今常见的多 GHz 计算机),您可以连接一个高带宽示波器并几乎像计算机一样查看/阅读它。但这是一个电子问题,而且肯定不是一个有用的答案。最终,任何它在显示器上的显示方式是一种抽象;根本没有办法直接感知电子设备每秒实际处理的数千亿甚至数万亿的电压变化。

编辑二进制数据的正常方法是使用十六进制编辑器编辑十六进制数据。使用十六进制是因为它对人类来说更容易(短得多),但仍然与位有直接对应关系;十六进制 (0-9a-f) 的每个“半字节”正好代表 4 位。显示这一点的传统方式是通过以下方式完成的xxd:它几乎向您显示了理解您正在编辑的二进制文件所需的一切:左侧,您在文件中的位置(偏移量);在右侧,它是什么,如果是文本(在二进制文件中很常见);中间是原始二进制数据(以十六进制表示)。xxd其二进制模式的作用类似,只是使用位而不是十六进制。

如果您确实只是想删除有用的信息,xxd可以选择十六进制模式 ( -p),但不能选择二进制模式。你可以使用cut

$ echo 'Hello, world'  | xxd  -b | cut -c 11-63
01001000 01100101 01101100 01101100 01101111 00101100
00100000 01110111 01101111 01110010 01101100 01100100
00001010                 

或者如果你真的不想格式化,比如:

perl -nE 'print unpack("B*", $_); END { print "\n"; }'

(由 反转perl -nE 'print pack("B*", $_);'

但如果您确实想理解或编辑二进制数据,那么十六进制编辑器是迄今为止通用工具的最佳选择。

顺便说一句:您的二进制→文本编辑器→二进制在十六进制模式下很容易;xxd -r这样做。上面的 perl 片段将为二进制执行此操作:

$ echo 'Hello, world!' | perl -nE 'print unpack("B*", $_); END { print "\n"; }' | tee /dev/stderr | perl -nE 'print pack("B*", $_);'
0100100001100101011011000110110001101111001011000010000001110111011011110111001001101100011001000010000100001010
Hello, world!

我把 放在tee那里是为了显示它们之间传递的位 - 请注意它与 相比是多么难以理解xxd

$ echo 'Hello, world!' | xxd | tee /dev/stderr | xxd -r
00000000: 4865 6c6c 6f2c 2077 6f72 6c64 210a       Hello, world!.
Hello, world!

相关内容