是否有可能在python中以非字节为增量打包一组整数?

时间:2015-04-09 02:12:30

标签: python binary

我们说我有三个无符号整数ABC,我知道每个整数的最大值。 AB都小于2 14 C小于2 4 。从14 + 14 + 4 = 32开始,我应该能够以32位存储这三个整数,对吧?

如果是这样,我怎么能在python中这样做? Struct.pack似乎只支持字节大小的寄存器,因此我将被限制为' HHB',这是40位(比我需要的多8位)。可以这样做,还是我错过了一些基本概念?

2 个答案:

答案 0 :(得分:0)

库听起来像是要走的路,但只是为了按位操作的乐趣:

a_in, b_in, c_in = 15220, 9021, 9
a_bits, b_bits, c_bits = 14, 14, 4

packed = a_in << b_bits + c_bits | b_in << c_bits | c_in

a_out = (packed & 2 ** a_bits - 1 << b_bits + c_bits) >> b_bits + c_bits
b_out = (packed & 2 ** b_bits - 1 << c_bits) >> c_bits
c_out =  packed & 2 ** c_bits - 1

print packed    # 3989976025 = 11101101110100100011001111011001
print a_out     # 15220      = 11101101110100
print b_out     # 9021       =               10001100111101
print c_out     # 9          =                             1001

答案 1 :(得分:0)

使用位运算符自行打包:

(A<<18)|(B<<4)|C

然后在32位结果上使用struct.pack