【发布时间】:2016-01-01 14:21:37
【问题描述】:
我有一个文件,其中填充了二进制数据,表示大端顺序的 2 字节指令序列。
我需要能够将这些指令解码为更有意义的等价物,但我无法将数据转换为我可以使用的格式。
我认为最好将指令转换为实际的 0 和 1 字符串。
到目前为止,我已经写了这个:
def slurpInstructions(filename):
instructions = []
with open(filename, 'rb') as f:
while True:
try:
chunk = f.read(1)
print(struct.unpack('c', chunk))
except:
break
一次打印出 1 个字节,如下所示:
(b'\x00',)
(b'a',)
我知道文件中的第一条指令是:
0000000001100001
所以,它看起来像是打印出与每个字节的整数值相对应的 ascii 字符,除了当 int 值没有 ascii 字符时它只是打印出十六进制表示。
我从这里去哪里?我需要把我的b'a' 变成'1100001',因为我真正关心的是位,而不是字节。
【问题讨论】:
-
裸露的
try/except不被认为是好的做法。它可以捕获读取时的 IO 错误或 struct.unpack 或(可能)文件末尾的struct.error。令人困惑和不好的做法。
标签: python string encoding binary