私はPythonのバイト(b''
)として定義したctype.Structureにアクセスしたいと思います。ctypesをバイトに変換するには
正しい方法は分かりませんが、私は他のデバイスにヘッダ(それはアーキテクチャフリーでなければならない)を送る必要があります。
としてだから私は、例えば、それを定義した:
class Header(ctypes.Structure):
_pack_ = 2
_fields_ = [
('version', c_uint8),
('additional_options', c_uint8),
('soft_version', c_uint16),
('compilation_time', c_uint8 * 6),
('crc', c_uint16)
]
は、今私はCRCを計算する必要があります。 version
からcompilation_time
に開始する私はバイトを扱う関数を持っています。
私にとっては、ctypes.Structureをバイト(b ")に変換するか、直接メモリにアクセスして最後の2バイトを変更するだけでOKです。
私はstructを試してみましたが、私は見つけませんでしたプラグマオプション。
BIG欠点は、読みやすさです。私のヘッダーは128バイトなので、本当に混乱して読めなくなります(ctypesと比較して)。 'H' =' unsigned short'のマシンで何が2番目に** ** = 16ビット? –
@ S.Rあなたは「構造体を試しましたが、私は**プラグマ**オプションを見つけられませんでした」と述べました。構造体をまったく使用したくない場合は、より具体的にしてください。とにかく、ctypesソリューションを表示するように更新されました。 –
@MarekTolonen私の意見では、両方のオプションはPythonコードの残りの部分と同じくらい読みやすくはありません。しかし、私は最終的にネイティブ 'struct'を使用しました。 –