给定一个具有分辨率压缩二进制数据的文件,我希望在Python中将子字节位转换为它们的整数表示。我的意思是需要将文件中的n个位解释为一个整数。
目前,我正在将文件读入bitarray对象,并将对象的子集转换为整数。这个过程虽然可行,但速度较慢且繁琐。是否有更好的方法来做到这一点,例如使用struct模块?
目前,我正在将文件读入bitarray对象,并将对象的子集转换为整数。这个过程虽然可行,但速度较慢且繁琐。是否有更好的方法来做到这一点,例如使用struct模块?
import bitarray
bits = bitarray.bitarray()
with open('/dir/to/any/file.dat','r') as f:
bits.fromfile(f,2) # read 2 bytes into the bitarray
## bits 0:4 represent a field
field1 = int(bits[0:4].to01(), 2) # Converts to a string of 0s and 1s, then int()s the string
## bits 5:7 represent a field
field2 = int(bits[4:7].to01(), 2)
## bits 8:16 represent a field
field3 = int(bits[7:16].to01(), 2)
print """All bits: {bits}\n\tfield1: {b1}={field1}\n\tfield2: {b2}={field2}\n\tfield3: {b3}={field3}""".format(
bits=bits, b1=bits[0:4].to01(), field1=field1,
b2=bits[4:7].to01(), field2=field2,
b3=bits[7:16].to01(), field3=field3)
输出:
All bits: bitarray('0000100110000000')
field1: 0000=0
field2: 100=4
field3: 110000000=384
field3
告诉我field4
需要多大空间。然后文件会重复field1
、field2
等。field4
是以字节为单位的。 - zachd1_618