Python 3 构建字节数组
我需要构建一个包含原始二进制数据的TCP帧,但我找到的所有示例和教程都在讲如何从字符串转换,而这并不是我想要的。
简单来说,我只需要构建一个字节数组:
0xA2 0x01 0x02 0x03 0x04
请注意,我是从C/C++的背景过来的。
我尝试了这个:
frame = b""
frame += bytes( int('0xA2',16) )
frame += bytes( int('0x01',16) )
frame += bytes( int('0x02',16) )
frame += bytes( int('0x03',16) )
frame += bytes( int('0x04',16) )
然后,把这个帧变量传给socket的发送方法,但结果并没有按我预期的那样工作,因为帧里没有我想要的内容...
我知道这是一个关于Python的非常基础的问题,所以如果你能给我指个方向就好了...
5 个回答
9
frame = b'\xa2\x01\x02\x03\x04'
到现在为止还没提到过...
19
那直接用一个标准的列表来构建你的框架怎么样呢?
frame = bytes([0xA2,0x01,0x02,0x03,0x04])
bytes()
这个构造函数可以从一个包含int
值的可迭代对象中创建一个字节框架。可迭代对象就是任何实现了迭代器协议的东西,比如列表、迭代器,或者像range()
返回的那种可迭代对象……
65
使用一个 bytearray
:
>>> frame = bytearray()
>>> frame.append(0xA2)
>>> frame.append(0x01)
>>> frame.append(0x02)
>>> frame.append(0x03)
>>> frame.append(0x04)
>>> frame
bytearray(b'\xa2\x01\x02\x03\x04')
或者,使用你的代码,但修正其中的错误:
frame = b""
frame += b'\xA2'
frame += b'\x01'
frame += b'\x02'
frame += b'\x03'
frame += b'\x04'