gpt4 book ai didi

python - 如何在python中将4个9位和1个4位int变量打包成5个8位变量?

转载 作者:行者123 更新时间:2023-12-01 04:03:26 26 4
gpt4 key购买 nike

我在 0~0x1FF(9-bit) 之间有 4 个变量和 0~0xF(4-bit) 之间的 1 个变量我想将它们打包成二进制文件。像往常一样,我将前四个打包为 pack('H', var) (无符号短整型,16 位),然后用 pack('B', var) 打包最后一个(无符号字符,8 位)。

所以我要花费72 bits :

16 * 4 + 8 = 72

我面临着一个特殊的情况:我的存储空间非常非常宝贵,我只需要 40 位:

4 * 9 + 1 * 4

我浪费了32位,而且这32位对我来说很重要,因为我有很多数据要打包,每次我浪费32位,最后,我的存储向我提示。

事实上,我可以将4个9位变量和1个4位变量更改为5个8位变量(无符号字符),然后我将它们全部打包为pack('B', var) ,当然我保存的是32位。

4 * 9 + 1 * 4 == 5 * 8

如何简单地更改 pack 4 9 位变量和 1 4 位变量 int 5 8 位变量?

最佳答案

自己打包:

import struct
ninebits = [0b110011001,0b000000000,0b111111111,0b010101010]
fourbit = 0b1010
pack = 0
for i,v in enumerate(ninebits):
pack <<= 9
pack |= v
pack <<= 4
pack |= fourbit
print('{:040b}'.format(pack))
print('{:010X}'.format(pack))
print(struct.pack('>LB',pack >> 8, pack & 0xFF))

输出:

1100110010000000001111111110101010101010
CC803FEAAA
b'\xcc\x80?\xea\xaa'

请注意,?\x3f 的 ASCII。

关于python - 如何在python中将4个9位和1个4位int变量打包成5个8位变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36104451/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com