可能重复:将
4个整数打包为ONE BYTE?
我有四个整数{ a,b,c,d},可以有值的范围如下:
a - {0或1}(1位)
b - {0或1}(1位)
c - {0,1,2,...,7}(3位)
d - {0,1,2,...,7}(3位)
是否有可能将它们"转换"为ONE INTEGER(0-255之间)而无需进行打包/拆包?如果是这样,我如何在Python中实现这一目标?
如果你的意思是你不想做包装和拆包,ctypes.Structure提供这些设施.
例如:
from ctypes import *
class Int(Structure):
_fields_ = [("a", c_int, 1), ("b", c_int, 1),
("c", c_int, 3), ("d", c_int, 3)]
p = Int()
p.a = 1
p.b = 0
p.c = 7
p.d = 3
Run Code Online (Sandbox Code Playgroud)
与我以前的答案完全相同,但是使用*而+不是<<和|,你可以做到
i = a + 2*b + 4*c + 32*d
Run Code Online (Sandbox Code Playgroud)
包装和
a, b, c, d = i % 2, i//2 % 2, i//4 % 8, i//32 % 8
Run Code Online (Sandbox Code Playgroud)
打开包装.这与位操作相同,只是不使用位操作.我没有看到这一点,但你要求它.