Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将整数列表转换为字符串_Python_String_Sockets - Fatal编程技术网

Python 将整数列表转换为字符串

Python 将整数列表转换为字符串,python,string,sockets,Python,String,Sockets,我正在尝试使用socket.sendto函数发送UDP数据包中的随机字节块。我可以生成随机字节,但sendto似乎要求数据为字符串。为了测试的目的,我将生成数千个这样的数据包,所以我需要一种内存有效的技术。有谁能告诉我一个函数,它将接受整数列表(范围256)并转换为(非逗号分隔的)字符串?在接收端,我将使用c代码查看原始字节。编辑:我终于赶上了。 您需要一个字节数组。将整数列表传递到bytes构造函数将创建一个字节数组 例如,将二进制代码写入文件: with open('rawfile.t

我正在尝试使用socket.sendto函数发送UDP数据包中的随机字节块。我可以生成随机字节,但sendto似乎要求数据为字符串。为了测试的目的,我将生成数千个这样的数据包,所以我需要一种内存有效的技术。有谁能告诉我一个函数,它将接受整数列表(范围256)并转换为(非逗号分隔的)字符串?在接收端,我将使用c代码查看原始字节。

编辑:我终于赶上了。 您需要一个字节数组。将整数列表传递到
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,这是一个类型代码,它也应该是a
B
再次感谢-这正是我想要的!
from array import array

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