如何在python中将字节转换为二进制字符串?

时间:2014-11-26 21:27:58

标签: python python-3.x

我有一些代表字节的数字,我想制作一个二进制字符串。

通过二进制字符串,我的意思是b"something"

这是我的尝试,为“做一些研究”的记录。我试图谷歌它,但发现只有另一个方向(二进制字符串到字节)。

我的目标是b'\x04\x05\x06'从4,5,6

(intelhex lib只是因为那是我需要二进制字符串的地方)

In [1]: from intelhex import IntelHex
In [2]: ih = IntelHex()
In [3]: addr=10
In [4]: a=5
In [5]: b=4
In [6]: c=255

In [7]: ih.puts(addr, bytes(a, b, c))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-7-def738bb7624> in <module>()
----> 1 ih.puts(addr, bytes(a, b, c))

TypeError: bytes() argument 2 must be str, not int

In [8]: ih.puts(addr, b'{}{}{}'.format(a, b, c))
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-8-eabba8aef324> in <module>()
----> 1 ih.puts(addr, b'{}{}{}'.format(a, b, c))

AttributeError: 'bytes' object has no attribute 'format'

我可能在这里做了一些愚蠢的错误,bytes()函数应该这样做。

3 个答案:

答案 0 :(得分:3)

我发现了它,确实是一个愚蠢的错误

我在那里缺少括号。

In [8]: bytes([4,5,6])
Out[8]: b'\x04\x05\x06'

让它帮助未来的googlers。

答案 1 :(得分:2)

您可以使用struct模块。见https://docs.python.org/library/struct.html

struct.pack(fmt, v1, v2, ...)
Return a string containing the values v1, v2, ... packed according to the given format.

格式字符串信息位于:https://docs.python.org/library/struct.html#format-characters

因此,如果您希望将每个数字存储为整数(字节顺序取决于平台):

>>> struct.pack("iii", 5, 4, 255)
b'\x05\x00\x00\x00\x04\x00\x00\x00\xff\x00\x00\x00'

或者作为无符号字节:

>>> struct.pack("BBB", 5, 4, 255)
b'\x05\x04\xff'

答案 2 :(得分:1)

您可以使用struct模块。

In [16]: ret = bytearray(struct.pack("B", a))

In [17]: ret
Out[17]: bytearray(b'\x05')

In [18]: ret.append(b)

In [19]: ret.append(c)

In [20]: ret
Out[20]: bytearray(b'\x05\x04\xff')