Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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
将bytearray向后移植到Python 2.5_Python_Python 3.x_Byte_Bytearray_Python 2.5 - Fatal编程技术网

将bytearray向后移植到Python 2.5

将bytearray向后移植到Python 2.5,python,python-3.x,byte,bytearray,python-2.5,Python,Python 3.x,Byte,Bytearray,Python 2.5,我试图将websocket示例转换为在Python2.5中使用,但在使用bytearray类型时遇到了错误 代码在此处停止用于Python 2.5(在的send_text方法中): message变量存储发送给客户端的字符串输入 它尝试创建一个字节数组,并使用self.request.send方法发送该数组。我将如何更改它以使其在没有字节类型或bytearray的Python 2.5中工作?使用struct可能会工作,我还没有测试过这一点 作为一种解决方法,我将使用struct.pack逐个字节

我试图将websocket示例转换为在Python2.5中使用,但在使用bytearray类型时遇到了错误

代码在此处停止用于Python 2.5(在的send_text方法中):

message变量存储发送给客户端的字符串输入


它尝试创建一个字节数组,并使用self.request.send方法发送该数组。我将如何更改它以使其在没有字节类型或bytearray的Python 2.5中工作?

使用struct可能会工作,我还没有测试过这一点

作为一种解决方法,我将使用struct.pack逐个字节进行打包

mensaje = "saludo"
FIN    = 0x80
OPCODE = 0x0f
payload = ''
for c in mensaje:
    payload += struct.pack("H", ord(c))

msj = struct.pack("H",FIN | OPCODE )
msj+= struct.pack("H",len(payload))
print msj + payload
我在struct.pack函数中使用“H”作为“fmt”参数,但您最好检查包是如何发送的,以及每个“字符”有多少字节(因为我猜您使用的是unicode,我使用的是“H”,unsigned short=2字节)

更多信息:,第7.3.2.1节和第7.3.2.2节

编辑: 我将在这里回答,使用'chr()'而不是'struct.pack()'是什么意思:


如果您打印消息,那么使用
struct.pack(“B”,ord(something))
时,您应该会看到与使用
ord(something)时相同的输出。
,我只是使用struct.pack(),因为我认为您的消息是每个字符两个字节(作为unicode).

使用Python 2.5而不是升级的原因是什么?我正在开发的库当前正在运行Jython 2.5.3。是的,Jython 2.5.3具有struct。然后,使用
struct.pack
而不是使用bytearray来创建标头+负载。我希望通过这种方式可以创建一个二进制数据包。查看文档,语法会像struct.pack(fmt,FIN | OPCODE_TEXT,payload_length)和self.request.send(struct+payload)一样吗。对吗?fmt参数应该是什么?非常感谢!此解决方法使用fmt=“B”而不是“H”进行工作。看起来服务器现在可以发送文本了。很高兴听到这个消息。那么,您发送的是ascii字节?(B是一个字符,在这种情况下,您可以使用
ord(c)
是的,看起来我在发送ascii字节。用ord(c)替换struct是什么意思?我编辑了我的答案,可能是代码(没有
struct.pack()
函数)同样有效。-->好的,它是'chr'而不是'ord'。查看上一版本。好的,据我所知,bytearray只是一个字节序列。字符串也是一个字节序列。
struct.pack
所做的是以一种简单的方式将字节存储在字符串中。因此,正如您所看到的,既然所有选项都只是一个字节数组,那么它们就都可以正常工作同样。当然,在这种情况下很容易,因为我们讨论的是单字节字符,但对于unicode,我想使用os struct.pack()是必要的(这只是一种在字符串数组中打包字节的方法…与bytearray相同)。
mensaje = "saludo"
FIN    = 0x80
OPCODE = 0x0f
payload = ''
for c in mensaje:
    payload += struct.pack("H", ord(c))

msj = struct.pack("H",FIN | OPCODE )
msj+= struct.pack("H",len(payload))
print msj + payload
mensaje = "saludo"
FIN    = 0x80
OPCODE = 0x0f
payload = mensaje
msj = chr( FIN | OPCODE )
msj+= chr(len(payload))
print msj + payload