繁体   English   中英

Python将二进制值读取为ASCII

[英]Python reading binary values as ASCII

我正在使用python 3.7。 由于某种原因,我的代码将二进制文件而不是二进制对象作为字符串输入读取。 我不知道是什么原因造成的,而我写的内容似乎与其他人在读取二进制文件的解决方案中使用的内容相匹配。

import sys

filename = sys.argv[1]
with open(filename, "rb") as f:
    byte = f.read(1)
    while byte:
        print(byte)
        print(type(byte))
        byte = f.read(1)

我认为这可能是由于编写二进制文件的代码是如何编写的。 这是代码:

messages=[[101,1,0,2,10,3,1,4,0],
      [101,1,1,2,9,3,1,4,0],
      [101,1,2,2,8,3,1,4,0],
      [101,1,3,2,7,3,1,4,0],
      [101,1,4,2,6,3,1,4,0],
      [101,1,5,2,5,3,0,4,1],
      [101,1,6,2,4,3,0,4,1],
      [101,1,7,2,3,3,0,4,1],
      [101,1,8,2,2,3,0,4,1],
      [101,1,9,2,1,3,0,4,1],
      [101,1,10,2,0,3,0,4,1]]

newFile = open("testData.bin", "wb")
for message in messages:
    line=[]
    for value in message:
        bValue=value.to_bytes(1, byteorder='big',signed=False)
        line.append(bValue)
        newFile.write(bValue)

我当前的结果是第一行打印出文件的ascii值,第二行显示这是一个字符串。

当显示byte的表示形式时,Python解释器将显示与该byte相对应的ASCII字符,该byte的值在0-127的范围内,并且可以表示该字符。 否则,它将显示十六进制转义。

messages的第一个列表为例。

>>> m = messages[0]
>>> m
[101, 1, 0, 2, 10, 3, 1, 4, 0]
>>> bs = b''.join(x.to_bytes(1, byteorder='big', signed=False) for x in m)
>>> bs
b'e\x01\x00\x02\n\x03\x01\x04\x00'

101和10是可显示的ASCII字符

>>> chr(101)
'e'
>>> chr(10)
'\n'

因此您会在字节序列中看到ASCII等效项。 0、1、2、3和4无法显示,因此将显示十六进制转义符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM