我需要编写连接超过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。
答案 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
符合缓冲区接口,因此不需要编码。