使用扭曲的Python从客户端捕获数据作为十六进制

时间:2013-11-14 12:27:54

标签: python sockets twisted

我需要编写连接超过100个客户端的服务器应用程序,这些客户端是嵌入式计算机,每2分钟通过tcp套接字发送一些十六进制数据。之前我在C#中成功编写了同样的东西,但现在我想用python在python中编写相同的东西。因为我是python的新手,所以我遇到了一些问题。在C#中,我将来自客户端的数据直接存储在字节数组中,然后处理该字节数组。现在我想在python中做同样的事情,但我找不到怎么做?以下代码仅显示了hex-> ascii-> char。

def rawDataReceived(self, data):
            print "hello"
            print data

我的问题如何将此数据转换为字节数组或直接将数据捕获为字节? 例如,客户端想要发送'w'字母表,它将服务器77发送为1字节。我当前的代码显示了w,但我如何将其转换为bytes [] array [0] = 0x77。

1 个答案:

答案 0 :(得分:2)

要从str创建字节数组,请使用bytearray:*

>>> data = 'hello'
>>> array = bytearray(data)
>>> array[0]
104
>>> hex(array[0])
0x68
>>> array[0] == 0x68
True

或者,您可以使用ord逐个字符转换为字节:

>>> ord(data[0])
104

所以这些是等价的:

>>> list(bytearray(data)) == [ord(c) for c in data]
True

*请注意,这里的文档有点令人困惑。他们说字符串需要编码,但这在Python 3.x中才是真的(对于为版本2.7明确编写的文档来说这是奇怪的)。在2.x中,str符合缓冲区接口,因此不需要编码。