Python 3 构建字节数组

48 投票
5 回答
125802 浏览
提问于 2025-04-17 03:06

我需要构建一个包含原始二进制数据的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'

撰写回答