我有一个这样的元组(注意,第一个元素可以是任意大小(大但不是很大,即2**12-1可以),第二个元素总是在[0,255]范围内)。
t = [(0, 137), (0, 80), (0, 78), (0, 71), (0, 13), ...]
我想将这些数字作为字节存储在文件系统中(用于压缩)。这意味着我以后还想使用这些位来恢复元组。还要注意,使用大端是必需的。
for idx, v in compressed:
if v:
f.write(struct.pack(">I", idx))
f.write(struct.pack(">I", v))
但是,当我试图得到这些数字时,就像这样:
with open(filepath, 'rb') as file:
data = file.read(4)
nums = []
while data:
num = struct.unpack(">I", data)[0]
print(num)
data = file.read(4)
nums.append(num)
我没有得到上面的数字(我支持一些数字,但后来它变得一团糟,可能是因为位填充)。
如何与位填充保持一致?我该怎么加
struct.pack('>I, ...)
我以后能可靠地得到?
更新:
对于以下元组
[(0, 137), (0, 80), (0, 78), (0, 71), (0, 13), (0, 10), (0, 26), (6, 0), (0, 0), (9, 13), (0, 73), (0, 72), (0, 68), (0, 82), (9, 0), (0, 1), (0, 44), (15, 1), (17, 8), (0, 2), (15, 0), (0, 246) ...]
我用我的方法得到以下数字:
[0, 137, 0, 80, 0, 78, 0, 71, 0, 13, 0, 10, 0, 26, 9, 13, 0, 73, 0, 72, 0, 68, 0, 82, 0, 1, 0, 44, 15, 1, 17, 8, 0, 2, 0, 246 ...]
看,在(6,0)处开始发散。在那之前一切都很好。但它能自我修正吗??9点13分继续表现良好。