簡體   English   中英

將字節數組向后移植到 Python 2.5

[英]Backporting bytearray to Python 2.5

我正在嘗試將此websocket 示例轉換為在 Python 2.5 中使用,但在使用 bytearray 類型時遇到了錯誤。

代碼在此處停止適用於 Python 2.5(在websocket_server/websocket_server.py的 send_text 方法中):

    FIN    = 0x80
    OPCODE = 0x0f
    def send_text(self, message):
       header = bytearray();
       payload = encode_to_UTF8(message)
       payload_length = len(payload)
       header.append(FIN | OPCODE_TEXT)
       header.append(payload_length)

       self.request.send(header + payload)

message 變量存儲發送給客戶端的字符串輸入。

它嘗試創建一個字節數組並使用 self.request.send 方法發送它。 我將如何更改它以使其在沒有字節類型或字節數組的 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',無符號短 = 2 個字節)。

更多信息: https ://docs.python.org/2/library/struct.html,第 7.3.2.1 和 7.3.2.2 節。

編輯:我會在這里回答,使用“chr()”而不是“struct.pack()”是什么意思:

mensaje = "saludo"
FIN    = 0x80
OPCODE = 0x0f
payload = mensaje
msj = chr( FIN | OPCODE )
msj+= chr(len(payload))
print msj + payload

如果您打印的消息,那么您在使用時會看到相同的輸出struct.pack("B", ord(something))使用時,比ord(something) ,我只是用struct.pack(),因為我認為你的信息是每個字符兩個字節(作為 unicode)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM