Python 将4个整数打包为一个整数?

Python 将4个整数打包为一个整数?,python,binary,Python,Binary,可能重复: 我有四个整数{a,b,c,d},它们的值范围如下: a-{0或1}(1位) b-{0或1}(1位) c-{0,1,2,…,7}(3位) d-{0,1,2,…,7}(3位) 是否可以将它们“转换”为一个整数(0-255之间),而不必进行位打包/解包?如果是这样的话,我如何在Python中实现这一点?相当于,但使用*和+而不是大多数都是无用的,因为他要求将其打包成一个1字节的整数 由于这些都比字符小,因此可以执行以下操作: import struct print struct.pac

可能重复:

我有四个整数{
a
b
c
d
},它们的值范围如下:

a
-{0或1}(1位)

b
-{0或1}(1位)

c
-{0,1,2,…,7}(3位)

d
-{0,1,2,…,7}(3位)


是否可以将它们“转换”为一个整数(0-255之间),而不必进行位打包/解包?如果是这样的话,我如何在Python中实现这一点?

相当于,但使用
*
+
而不是
大多数都是无用的,因为他要求将其打包成一个1字节的整数


由于这些都比字符小,因此可以执行以下操作:

import struct
print struct.pack('cccc', a, b, c, d)
这将为您提供一个4字节的整数。

如果您的意思是不想进行位打包和解包,请提供以下工具

例如:

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

这些都是非常奇怪的整数大小,您几乎肯定必须进行位操作才能将它们组合在一起。@user540009本质上,您似乎在问如何在不进行位操作的情况下进行位操作。好的,3+3+1+1=8位,因此一个字节可以容纳这些值,但是。。。您必须执行位屏蔽来检索和保存值,但不确定为什么会遇到麻烦,尤其是在python中,因为您不希望需要将它们保存到文件中。这将帮助我在一个字节内存储4个参数的数据,从而节省磁盘空间。不过,在后台,乘法不是以左移位的方式实现的吗?(+1 BTW)@Sven Marnach:谢谢你的回答!现在我不必处理位操作,我只需将四个项转换为一个字节,使用
struct
打包并写入文件!要解包,我将使用
struct
从文件中读取一个字节,解包后得到实际的数字。你救了我一命@USER540009:位操作有什么问题?不管怎样,这些都是伪装的小动作。@Sven-Marnach:没什么不对的。然而,这种解决方案对人眼来说比bits(至少对我来说)更容易理解。我不确定是否有一种不用bits的方法可以实现这一点,因此我询问了如何使用bits实现这一点。但是现在我发现这是可能的,我将使用这个版本的代码而不是位。@user540009:绝大多数习惯于这种问题的程序员会发现按位操作比乘法和除法更清晰。当然,在使用逐位运算时,将值打包到单个字节的意图要清楚得多。完美,这正是我想要做的。@user540009:但这将打包到四个字节(32位)而不是一个字节(8位)。丹尼尔·普莱登:谢谢你让我注意到这一点。我将把它打包成一个字节('c')。
import struct
print struct.pack('cccc', a, b, c, d)
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