2017-07-20 5 views
1

生のバイトを異なるデータ型として自由に再解析し、さまざまな算術演算を実行できるPythonモジュールはありますか?ここでPythonでのCスタイルデータの操作

char test[9] = "test_data"; 
int32_t *x = test; 
(*x)++; 
printf("%d %.9s\n", x, test); 

//outputs 1245780400 uest_data on LE system. 

、メモリの同じチャンクの両方testxポイント:たとえば、このCスニペットを見てみましょう。私はxを使用して空気乾燥を行い、testを文字列ベースの操作と個々のバイトアクセスに使用できます。

私はPythonで同じことをしたい - 私はバイトのリストと整数間の変換する必要性を感じ、多分いじるなどがはるかに容易になり、モジュールがありますwhenerver私はstruct.packstruct.unpackを使用することができることを知っています。

私は算術演算をサポートするデータ型を持ちたいと同時に、個々のバイトを混乱させることができます。これは、Pythonが設計されたユースケースのようには聞こえませんが、それでもかなり一般的な問題です。

暗号は、このような機能のための最も一般的な使用例1であるので、私は、pycryptoコードベースに見ていたが、pycryptoは、プレーンCにそのアルゴリズムのほとんどを実装し、はるかに小さいPythonの一部が2つの手作りのメソッド(long_to_bytesbytes_to_longを使用しています)を使用して型間の変換を行います。

答えて

1

あなたはC.

で労働組合と類似している、ctypes.Unionを使用することができるかもしれ私はCでの多くの経験を持っていないが、私は労働組合を使用すると、1つのタイプとしてメモリ位置への書き込みを許可し理解してあなたのユースケースに合っていると思われる別のタイプとして読み込みます。

https://docs.python.org/3/library/ctypes.html#structures-and-unions

ニーズが単純であればそうでない場合は、あなただけのビルトインint.to_bytesint.from_bytesメソッドを使用して整数に/からbytes/bytearrayオブジェクトを変換することができます。

+0

労働組合は私の問題を直接解決しませんが、間違いなく助けになります。ありがとう! – user1234567