每当我尝试打开像图像或 exe 程序这样的二进制文件时,我看不到 0 和 1,我只看到一些东西,例如 \x00\x8fi>\x9f\xd2\x98\x16\ 二进制数据如何?
我正在使用:python 3.7,输出在 windows 10 pro 上的 cmd 我用“rb”而不是“r”做了一个 file.read()
每当我尝试打开像图像或 exe 程序这样的二进制文件时,我看不到 0 和 1,我只看到一些东西,例如 \x00\x8fi>\x9f\xd2\x98\x16\ 二进制数据如何?
我正在使用:python 3.7,输出在 windows 10 pro 上的 cmd 我用“rb”而不是“r”做了一个 file.read()
这些值是十六进制的。
十六进制是一种使用 base-16 表示数字的方式
二进制是一种使用 base-2 (0,1) 表示数字的方法。
这些数字相同,但显示方式不同,因为二进制 00001111 比十六进制 0f 更详细(通常显示为 x0f,x 表示“十六进制”)。
就计算机而言,该值是 00001111,但显示给您的信息更密集,更容易“思考”,因为人类习惯于以 10 进制(十进制)进行思考。该数字使用完全相同的二进制位存储在内存中,以完全相同的方式用于计算并给出完全相同的结果。
唯一的区别在于该号码作为用户显示给您的方式。
您可能想阅读有关如何转换二进制、十进制和十六进制的信息,因为了解我们使用的数字如何仅仅是彼此的表示会很有用,根据您的情况可以更容易地使用它们。一旦你掌握了它的窍门,十六进制就是比普通十进制更好的处理计算机数据的表示。
看来您可能还在文本编辑器中打开了一个二进制文件。如果您在记事本中打开二进制文件,那么您可能会看到程序将字符视图与十六进制混合在一起。字符只不过是某个范围内的二进制数据,在该范围内,文本编辑器会将它们显示为“文本”而不是十六进制值。如果您想在不解释的情况下查看正确的文件数据,请使用十六进制查看器,而不是文本编辑器。
假设在以下某些情况下使用 Linux
在 python 中,您可以以“可显示”格式显示任何数据,该格式由
repr(value)
where value 是任何变量(或文字?)创建。现在数据始终是相同的,直到您直接或隐式转换它。
大多数情况下,您可能会决定如何解释或显示数据。
该
file
命令将尝试通过查找某些数据模式来识别文件的内容。然后在与“文件”可执行文件一起创建的数据文件中定义什么内容是“什么”。现在,可以用这种风格创建简单的文本文件:
然后使用
od
- 验证文件内容的实用程序检查/显示...所以,数据是相同的,只是以不同的格式解释或显示
(
man od
看看这个实用程序可以做什么,在上面)当您使用 Excel(或例如 LibreOffice Calc)时,您也有类似的可能性;但更倾向于格式化您显示的数据;根据实际的单元格内容。
例如,数字“25569”可以被视为以不同方式格式化的数字,带有千位分隔符、小数等等。或者当设置为日期时;
1970-01-01
(至少在 LbreOffice 中;按住 CTRL,按 1,然后单击Date
出现的对话框 - 在 Excel 中相同)。更多 Python?