高效地将ctypes LP_c_ubyte转换为Python 'str

2 投票
1 回答
3049 浏览
提问于 2025-04-16 23:43

我在使用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)

撰写回答