Python将布尔数组转换为二进制

2024-10-01 04:50:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为我们的新硬件设备准备新的驱动程序。在

设置它的一个选项是,其中一个字节有8个选项。每咬一口都会开启或关闭其他东西。在

所以,基本上我需要做的是,取8个0或1,然后创建一个字节。在

我做的是,我为它准备了助手函数:

@staticmethod
def setup2byte(setup_array):
    """Turn setup array (of 8 booleans) into byte"""
    data = ''
    for b in setup_array:
        data += str(int(b))
    return int(data, 2)

这样称呼:

^{pr2}$

我想知道有没有更简单的方法来做。一些内置函数之类的。有什么想法吗?在


Tags: of函数data字节硬件def选项助手
3条回答

我认为前面的答案创建了8个字节。此解决方案只创建一个字节

settings = [False,True,False,True,True,False,False,True]
# LSB first


integerValue = 0
# init value of your settings
for idx, setting in enumerate(settings):
    integerValue += setting*2**idx


# initialize an empty byte
mybyte = bytearray(b'\x00')
mybyte[0] =integerValue
print (mybyte)

更多的例子请访问这个伟大的站点:binary python

这基本上就是你已经在做的,但是要短一些:

data = int(''.join(['1' if i else '0' for i in settings]), 2)

但你要寻找的答案是: Bool array to integer

我相信你想要这个:

convert2b = lambda ls: bytes("".join([str(int(b)) for b in ls]), 'utf-8')

其中ls是布尔函数的列表。在Python2.7和3.x中工作。另一种方法更像您的原始版本:

^{pr2}$

相关问题 更多 >