如何在Python中读入文件的二进制文件
在Python中,当我尝试使用“rb”读取可执行文件时,我没有得到我期望的二进制值(0010001等),而是得到了一系列我不知道如何处理的字母和符号。
Ex: ???}????l?S??????V?d?\?hG???8?O=(A).e??????B??$????????: ???Z?C'???|lP@.\P?!??9KRI??{F?AB???5!qtWI??8
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
这就是二进制文件。它们以字节形式存储,当您打印它们时,它们被解释为 ASCII 字符。
您可以使用 bin() 函数 和 ord() 函数 查看实际的二进制代码。
That is the binary. They are stored as bytes, and when you print them, they are interpreted as ASCII characters.
You can use the bin() function and the ord() function to see the actual binary codes.
Python 中的字节序列使用字符串表示。打印字节序列时看到的一系列字母和符号只是字符串包含的字节的可打印表示形式。为了利用这些数据,您通常会以某种方式对其进行操作以获得更有用的表示。
您可以使用
ord(x)
或bin(x)
分别获取十进制和二进制表示形式:您传递的
'b'
标志toopen()
不会告诉 Python 任何有关如何表示文件内容的信息。来自文档:除非您只是想看看文件中的二进制数据是什么样子,否则 Mark Pilgrim 的书《Dive Into Python》有 使用二进制文件格式的示例。 该示例展示了如何从 MP3 文件读取 IDv1 标签。这本书的网站似乎已关闭,所以我链接到一个镜像。
Byte sequences in Python are represented using strings. The series of letters and symbols that you see when you print out a byte sequence is merely a printable representation of bytes that the string contains. To make use of this data, you usually manipulate it in some way to obtain a more useful representation.
You can use
ord(x)
orbin(x)
to obtain decimal and binary representations, respectively:The
'b'
flag that you pass toopen()
does not tell Python anything about how to represent the file contents. From the docs:Unless you just want to look at what the binary data from the file looks like, Mark Pilgrim's book, Dive Into Python, has an example of working with binary file formats. The example shows how you can read IDv1 tags from an MP3 file. The book's website seems to be down, so I'm linking to a mirror.
字符串中的每个字符都是二进制字节的 ASCII 表示形式。如果您希望它是由 0 和 1 组成的字符串,那么您可以将每个字节转换为整数,将其格式化为 8 个二进制数字并将所有内容连接在一起:
取决于您是否确实需要在二进制级别分析/操作外部模块例如 bitstring 可能会有所帮助。查看文档;要获得二进制解释,请使用以下内容:
Each character in the string is the ASCII representation of a binary byte. If you want it as a string of zeros and ones then you can convert each byte to an integer, format it as 8 binary digits and join everything together:
Depending on if you really need to analyse / manipulate things at the binary level an external module such as bitstring could be helpful. Check out the docs; to just get the binary interpretation use something like:
使用ord(x)获取每个字节的整数值。
Use
ord(x)
to get the integer value of each byte.如果您确实想将二进制字节转换为位流,则必须从
bin()
的输出中删除前两个字符 ('0b') 并反转结果:如果您使用Python 2.6 之前,没有
bin()
函数。If you realy want to convert the binaray bytes to a stream of bits, you have to remove the first two chars ('0b') from the output of
bin()
and reverse the result:If you use Python prior to 2.6, you have no
bin()
function.