高效地将ctypes LP_c_ubyte转换为Python 'str
我在使用ctypes绑定的时候遇到了一些问题,ctypes的文档让我有点头疼。
我有一个远程网络客户端在发送二进制数据,而我使用的库(Mosquitto,用于MQTT消息代理)提供了一种ctypes方法,可以从网络中获取原始的二进制数据。这种数据类型是"LP_c_ubyte"。有没有什么有效的方法可以把它转换回Python的'str'对象呢?
我需要一组普通的字节,以便用于M2Crypto的解密功能。
pp = ''.join(chr(msg.payload[i]) for i in xrange(msg.payloadlen))
clear_text = rsa.private_decrypt(pp, M2Crypto.RSA.pkcs1_padding)
这个方法可以用,但看起来有点丑。
我可以去修改客户端,让它先把所有数据进行base64编码,然后在这边再解码,但这似乎也有点像是变通的方法。
有没有更好的办法呢?
1 个回答
5
我觉得这个代码应该能满足你的需求:
import ctypes
pp = ctypes.string_at(msg.payload, msg.payloadlen)