我有四个整数{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中实现这一点?
答案 0 :(得分:6)
如果你的意思你不想进行打包和解包,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
答案 1 :(得分:5)
等同于my previous answer,但使用*
和+
代替<<
和|
,您可以
i = a + 2*b + 4*c + 32*d
用于包装和
a, b, c, d = i % 2, i//2 % 2, i//4 % 8, i//32 % 8
用于拆包。这样做as the bit operations,只是不使用位操作。我没有看到这一点,但你要求它。
答案 2 :(得分:0)
大部分内容都没用,因为他要求将其打包成1字节整数...
由于这些都小于char,您可以执行以下操作:
import struct
print struct.pack('cccc', a, b, c, d)
这将给你一个4字节的整数。