我有一些代表字节的数字,我想制作一个二进制字符串。
通过二进制字符串,我的意思是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()
函数应该这样做。
答案 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')