当我们用文本编辑器打开目标文件时,我们看到的符号是什么,它们(像@,..这样的符号)有什么意义?由于目标文件是二进制文件,我们希望看到1和0,但为什么我们看到这些符号呢?
答案 0 :(得分:3)
因为二进制文件包含二进制数据,而不是文本编辑器期望看到的ASCII数据。编辑器将如何显示"不可打印"字符。
在Linux上,如果你真的想看到0和1,你可以使用od
转储其他格式的文件(八进制,十六进制,二进制)。
答案 1 :(得分:2)
您在C0 Codes中看到的符号为caret notation,它们代表非打印的ASCII字符。
.o
files不包含人类可读的文本,因此当Vim尝试将其作为ASCII读取时,它们看起来像废话。
如果您希望将这些字符视为其组件字节(例如<00>
而非^@
),请尝试:set display+=uhex
(另请参阅:help display
)。
答案 2 :(得分:0)
由于目标文件是二进制文件,我们希望看到1和0&#39>
您的期望不正确。如果要查看0和1,则需要使用显示0和1的工具。
我找不到可以做到这一点的标准实用工具,没有人真的想看到0和1,因为这样的显示会非常冗长。程序员更喜欢十六进制显示,这种显示更加紧凑。例如,十六进制值0xfd
可以表示为以下0和1的序列:1111 1101
。
注1:0和1的序列完全相同,用不同的方式表示。
注2:您可以看到快速表达数字的位置已经失控:0xfffffffd
为1111 1111 1111 1111 1111 1111 1111 1101
但为什么我们会看到这些符号?
vim
编辑器将0和1的序列解释为<{1}}字符。例如,&#39; A&#39;的ASCII
代码是ASCII
,或以下0和1的序列:0x41
。完整0100 0001
表here。
为了更好地理解这一点,请在ASCII
中创建一个包含以下行的文件foo.txt
:
vim
然后通过以下方式运行此文件:
AAAAaaaa
BBBBbbbb
请注意,文件中包含的0和1不会发生更改,但上述每个命令都会以不同的方式解释这些0和1。
返回二进制文件。
所有文件都包含一系列字节。不同的工具可以对这些字节进行不同的解释。
当人们说&#34;二进制文件&#34;与&#34;文本文件&#34;,它们通常意味着后者包含仅字节,其中包含与其关联的可打印od -c foo.txt
od -b foo.txt
od -tx1 foo.txt
cat foo.txt
个字符,前者包含一些字节有非 - 可压缩ASCII
个字符(二进制文件也常常包含与可打印ASCII
对应的字节。有一个strings实用程序可以从&#34;二进制文件中提取这些可打印的字节序列&#34;并将它们解释为&#34; text&#34;。注意,有时这种解释会产生错误&#34;,并解释二进制数据作为可打印的字符串,可以看作here。