我正在逐字节解码二进制文件。读取大小为 8 位倍数的变量没有问题,例如:
#encoder
bitstream.add(data_id, 16)
#decoder
data_id = struct.unpack('>H', in_file.read(2))[0]
如果我愿意解码的数据不是 8 位的倍数怎么办?例如,我在比特流中添加以下数据:
#encoder
bitstream.add(F1, 1)
bitstream.add(F2, 1)
bitstream.add(F3, 1)
bitstream.add(F4, 1)
bitstream.add(F5, 1)
if (aflag):
bitstream.add(F6_a, 1)
bitstream.add(F7, 1)
else:
bitstream.add(F6_b, 1)
如果 if 评估为 True 我必须读取 7 位,否则我读取 6 位。
#decoder
# read 8 bits
data = struct.unpack('>B', in_file.read(1))[0]
F1 = data >> 7
F2 = data >> 6 & 0b01
F3 = data >> 5 & 0b001
F4 = data >> 4 & 0b0001
F5 = data >> 3 & 0b00001
if (aflag):
# first data block
F6_a = data >> 2 & 0b000001
F7 = data >> 1 & 0b1
else:
# second data block
F6_b = data >> 2 & 0b000001
在这种first data block
情况下,我正在读取 7 位并且我有一个备用位。在这种second data block
情况下,我正在读取 6 位并且我有 2 个备用位。在这 8 位之后,我有变量,它们都是 8 位的倍数或变量组,它们的大小一起是 8 位的倍数。因此,我正在寻找一种解决方案,该解决方案并不意味着读取所有后续变量以占备用位。
在这种first data block
情况下,如何将比特流指针设置为第 7 位,以便我可以读取以下数据,就好像上次读取没有备用位一样?