如何解决在Python 3中将二进制字符串转换为字节数组
这是Patrick提到的第一种方法:将位串转换为int并一次取8位。这样做的自然方法是按相反的顺序生成字节。要获得字节放回我的字节组使用扩展切片标志为-1的一步正确的顺序:b[::-1]
。
def bitstring_to_bytes(s):
v = int(s, 2)
b = bytearray()
while v:
b.append(v & 0xff)
v >>= 8
return bytes(b[::-1])
s = "0110100001101001"
print(bitstring_to_bytes(s))
显然,帕特里克的第二种方法更紧凑。:)
但是,在Python 3中有一种更好的方法:使用int.to_bytes方法:
def bitstring_to_bytes(s):
return int(s, 2).to_bytes(len(s) // 8, byteorder='big')
解决方法
尽管有很多相关的问题,但找不到与我的问题相符的问题。我想将二进制字符串(例如,"0110100001101001"
)更改为字节数组(相同的示例,b"hi"
)。
我尝试了这个:
bytes([int(i) for i in "0110100001101001"])
但是我得到了:
b'\x00\x01\x01\x00\x01' #... and so on
在Python 3中执行此操作的正确方法是什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。