我正在尝试使用socket.sendto函数在UDP数据包中发送一个随机字节块。我可以生成随机字节,但看起来像sendto要求数据是一个字符串。我将生成数千个这些数据包用于测试目的,因此我需要一种内存效率高的技术。任何人都可以告诉我一个函数将采用整数列表(范围256)并转换为(非逗号分隔)字符串?在接收端,我将使用c代码查看原始字节。
答案 0 :(得分:1)
您可能会发现array.array.tobytes有用:
from array import array
b = array("B", range(256)).tobytes() # tostring python2
B
是一个无符号字符type,适用于您的范围
答案 1 :(得分:0)
bytes
构造函数将创建一个字节数组。
例如,将二进制代码写入文件:
with open('rawfile.txt', 'wb') as f:
f.write(bytes([1,2,3]))
...
f.write(bytes([3,5,254]))
...
f.write(bytes([54, 65, 73, 74]))
你可能不得不担心编码,big-endian,little-endian等等。
要将其编码为字符串,之后只需构建字符串,但是,听起来像bytearray可能是您要发送的内容。
>>> print(bytes([84, 69, 83, 84]))
b'TEST'
>>> print(bytes([1,2,3]))
b'\x01\x02\x03'
>>> str(bytes([1,2,3]))
"b'\\x01\\x02\\x03'"
警告:大多数期望字符串的函数都会依赖于bytearray。但你可以尝试一下。 b'\x01\x02\x03'
和"b'\\x01\\x02\\x03'"