将4个整数打包为ONE INTEGER?

use*_*424 -3 python binary

可能重复:将
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中实现这一目标?

Tug*_*tes 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
Run Code Online (Sandbox Code Playgroud)


Sve*_*ach 5

我以前的答案完全相同,但是使用*+不是<<|,你可以做到

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)

打开包装.这与位操作相同,只是不使用位操作.我没有看到这一点,但你要求它.

  • 然而,在引擎盖下,不是左移的乘法不是吗?(+ 1 BTW) (3认同)
  • @ user540009:用于此类问题的*大多数程序员会发现按位运算*比乘法和除法更清晰*.当然,使用按位运算时,将值打包成单个字节的*intent*更清晰. (3认同)
  • @ useruser540009:位操作有什么问题?无论如何,这些只是伪装的一点点操纵. (2认同)