python填充中数_如何在python的结构中正确填充数字

本文讨论了如何将元组中的数值(第一个元素范围较大,第二个元素在[0,255])以大端方式存储为字节,并确保在解码时正确处理位填充。作者分享了解决大端结构化数据存储及读取时遇到的问题,以及如何通过struct.pack和unpack保持一致性。
摘要由CSDN通过智能技术生成

我有一个这样的元组(注意,第一个元素可以是任意大小(大但不是很大,即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分继续表现良好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值