将整数列表转换为字符串

时间:2015-10-16 19:42:52

标签: python string sockets

我正在尝试使用socket.sendto函数在UDP数据包中发送一个随机字节块。我可以生成随机字节,但看起来像sendto要求数据是一个字符串。我将生成数千个这些数据包用于测试目的,因此我需要一种内存效率高的技术。任何人都可以告诉我一个函数将采用整数列表(范围256)并转换为(非逗号分隔)字符串?在接收端,我将使用c代码查看原始字节。

2 个答案:

答案 0 :(得分:1)

您可能会发现array.array.tobytes有用:

from array import array

b = array("B", range(256)).tobytes() # tostring python2

B是一个无符号字符type,适用于您的范围

答案 1 :(得分:0)

编辑:我终于赶上了。 你想要一个字节数组。将一个int列表传递给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'"

之间存在很大差异