将4个整数打包为ONE INTEGER?

时间:2011-03-14 18:09:19

标签: python binary

  

可能重复:
  Packing 4 Integers as ONE BYTE?

我有四个整数{abcd},它们可以包含以下值范围:

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中实现这一点?

3 个答案:

答案 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字节的整数。