通过套接字发送十六进制数据被解释为字符串

时间:2014-07-18 14:45:48

标签: python sockets

我是python的新手,我正在尝试使用第三方库/模块。我现在正在做的是:

s.send(rtp.header_bytes + rtp.payload) 
# -> \x80!\x00\x01\x00\x00\x00d\x00\x00\x00\x00Testy

通过tcp套接字发送数据包的头和有效负载。在接收方:

conn, addr = socket_rtp.accept()
data = conn.recv(1024)

将数据传递给构造函数__init__(self, bytes, length),然后像这样使用

self.version = (bytes[0] & Packet.V_MASK) >> 6

但似乎它将字节数组解释为字符串?我得到以下例外:

.... line 322, in __init__
    self.version = (bytes[0] & Packet.V_MASK) >> 6
TypeError: unsupported operand type(s) for &: 'str' and 'int'

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

要将字符串(bytes)转换为int,您可以使用ord(假设您使用的是Python 2.x):

self.version = (bytes[0] & Packet.V_MASK) >> 6

struct.unpack

self.version = (struct.unpack('B', bytes[0])[0] & Packet.V_MASK) >> 6

>>> ord('\x80')
128
>>> import struct
>>> struct.unpack('B', '\x80')[0]
128