我有一个包含一系列10位整数的二进制文件。我想要读取它并将这些值存储到列表中。
下面的代码可以实现这个功能,它会读取my_file
并将整数值填充到pixels
中:
file = open("my_file", "rb")
pixels = []
new10bitsByte = ""
try:
byte = file.read(1)
while byte:
bits = bin(ord(byte))[2:].rjust(8, '0')
for bit in reversed(bits):
new10bitsByte += bit
if len(new10bitsByte) == 10:
pixels.append(int(new10bitsByte[::-1], 2))
new10bitsByte = ""
byte = file.read(1)
finally:
file.close()
将字节读入位,再将其读回“10位”字节似乎不太优雅。有没有更好的方法?
对于8位或16位整数,我可以直接使用file.read(size)
并将结果直接转换为整数。但是,由于每个值存储在1.25个字节中,我需要类似于file.read(1.25)
这样的东西……
bits = format(ord(byte), '08b')
比使用bin
函数更高效。但实际上,最好使用MisterMiyagi的建议,而不是这个绕弯的转换算法。 - PM 2Ring