2011-08-16 38 views
1

ctypesバインディングに問題があり、ctypesドキュメントが私の頭を少し傷つけています。効率的にctypes LP_c_ubyteをpython 'str'に変換する

バイナリデータを送信するリモートネットワーククライアントと、私が使用しているライブラリ(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に変更してから最初にすべてをエンコードしてから、この最後にunbase64を変更することもできますが、これも回避策のようです。

もっと良い方法がありますか?

答えて

3

私は、これはあなたが望む何をすべきだと思う:

import ctypes 
pp = ctypes.string_at(msg.payload, msg.payloadlen) 
関連する問題