有时,当您下载具有错误 mime 类型的编译二进制文件时,或者例如在二进制文件上运行“more”命令时,您会因为缺乏更好的术语而得到一堆“乱码”。
例如,这是我在 OS X 上用 gcc 编译的一个非常简单的 C 程序上从命令行运行“more”时看到的片段。
<94>^^^@^@ESC^@^@^@^^^A^@^@<A8>^^^@^@.^@^@^@^N^D^@^@^P ^@^@@^@^@^@^O^D^@^@^L ^@^@H^@^@^@^O^D^@^@^H ^@^@P^@^@^@^O
^D^@^@^@ ^@^@\^@^@^@^C^@^P^@^@^P^@^@p^@^@^@^O^A^@^@b^_^@^@y^@^@^@^O^D^@^@^D ^@^@<82>^@^@^@^O^A^@^@<B6>^^^@^@<88>
^@^@^@^O^A^@^@T^_^@^@<8D>^@^@^@^O^A^@^@T^^^@^@<93>^@^@^@^A^@^A^B^@^@^@^@<99>^@^@^@^A^@^A^B^@^@^@^@^L^@^@^@^M^@^@
^@ ^@dyld_stub_binding_helper^@__dyld_func_lookup^@dyld__mach_header^@_NXArgc^@_NXArgv^@___progname^@__mh_execute
_header^@_average^@_environ^@_main^@_sum^@start^@_exit^@_printf^@^@^@^@
Run Code Online (Sandbox Code Playgroud)
有人可以简单地解释一下这是为什么吗?当文本编辑器或纯文本 mime 类型尝试解释二进制数据时会发生什么?^@ 在这种情况下有什么意义吗?为什么有一些文字和一些乱码?这种二进制数据在文本中的表示方式是否有任何标准?为什么不是简单的1和0呢?
我可以从概念上将 ascii 或 unicode 理解为数字系统中字符的表示,可以简化为二进制 1 和 0 以及 CPU 可以理解的数字系统。但在更高的层面上,我试图了解二进制数据是什么。我想我想“看到抽象”,如果这有意义的话。
有没有办法在文本编辑器中以任何有意义的方式“查看”二进制数据?
除了文件中使用的值范围之外,文本文件和二进制文件之间确实没有显着差异。每个值都会根据所使用的代码页(ASCII、ANSI)转换为字符(在基本文本编辑器中)。
您看到字符“^@”是因为文件中该位置的字节值为 0(nul 字符)。nul 字符不可打印,因此 more 程序使用脱字符号来显示它。
您可以在十六进制编辑器中打开该文件,这是一种对二进制数据更敏感的文本编辑器。我对Mac软件不是很熟悉,但是可以在http://hexedit.sourceforge.net/下载一个免费的十六进制编辑器。
基本文本编辑器/查看器假设您用它打开的任何内容都应该以纯文本形式读取。
编辑:合并了 Mike Spross 的更正:^@。