Python 将整数列表转换为字符串
我正在尝试使用socket.sendto函数发送UDP数据包中的随机字节块。我可以生成随机字节,但sendto似乎要求数据为字符串。为了测试的目的,我将生成数千个这样的数据包,所以我需要一种内存有效的技术。有谁能告诉我一个函数,它将接受整数列表(范围256)并转换为(非逗号分隔的)字符串?在接收端,我将使用c代码查看原始字节。编辑:我终于赶上了。 您需要一个字节数组。将整数列表传递到Python 将整数列表转换为字符串,python,string,sockets,Python,String,Sockets,我正在尝试使用socket.sendto函数发送UDP数据包中的随机字节块。我可以生成随机字节,但sendto似乎要求数据为字符串。为了测试的目的,我将生成数千个这样的数据包,所以我需要一种内存有效的技术。有谁能告诉我一个函数,它将接受整数列表(范围256)并转换为(非逗号分隔的)字符串?在接收端,我将使用c代码查看原始字节。编辑:我终于赶上了。 您需要一个字节数组。将整数列表传递到bytes构造函数将创建一个字节数组 例如,将二进制代码写入文件: with open('rawfile.t
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]))
您可能需要担心编码、大端、小端等问题
要将其编码为字符串,只需在之后构建字符串,然而,听起来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'
之间有很大的区别,您可能会发现一个有用的:
B
是一个无符号字符,适用于您的范围首先获取整数列表,然后在列表上使用str()?[str(num)表示列表中的num]?为了测试目的,我将生成数千个这样的数据包,所以我需要一种内存高效的技术-哦,不,数千个!我知道这对现代计算机来说是个问题。谁有超过1千字节的备用内存?[54、65、73、74]将成为“测试”字符串中的一些字符将是不可打印的控制字符。同样,我的目标是发送原始字节。我想我明白了。请参阅更新的答案。虽然[54,65,73,74]
对于“Test”来说不是ascii,所以我可能还是不喜欢。在Python2.7中,我得到了这样一条消息:“array.array”对象没有属性“tobytes”@JimBob,Python中的数组(“h”,l)。tostring()
,感谢在我意识到我从ascii表的错误列中获取了ascii代码后,它才起作用。我假设“h”是十六进制。@JimBob,这是一个类型代码,它也应该是aB
再次感谢-这正是我想要的!
from array import array
b = array("B", range(256)).tobytes() # tostring python2