我们说我有三个无符号整数A
,B
和C
,我知道每个整数的最大值。 A
和B
都小于2 14 ,C
小于2 4 。从14 + 14 + 4 = 32
开始,我应该能够以32位存储这三个整数,对吧?
如果是这样,我怎么能在python中这样做? Struct.pack似乎只支持字节大小的寄存器,因此我将被限制为' HHB',这是40位(比我需要的多8位)。可以这样做,还是我错过了一些基本概念?
答案 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
。