4

BitString と ctypes を使い始めたばかりで、バイナリ ファイルの一部がクラスに格納されstartdataています。BitArray

> print(startdata)
0x0000000109f0000000010605ffff

ここで、このデータを as 引数を取る C 関数にそのまま渡す必要があるunsigned char *ため、最初に次のようなことを試みます。

buf = (c_ubyte * len(startdata))()

最終的にこれを行うには:

buf_ptr = cast(pointer(buf), POINTER(c_ubyte))

startdataこれは機能しますが、作成したばかりの配列/バッファにバイトデータを割り当てるにはどうすればよいですか?

これは機能しません:

> buf = (c_ubyte * len(startdata))(*startdata.bytes)
TypeError: an integer is required
4

1 に答える 1

3

これが可能な解決策です(私はpython 3を使用していることに注意してください):

import ctypes

def bitarray_to_ctypes_byte_buffer(data):
    """Convert a BitArray instance to a ctypes array instance"""
    ba = bytearray(data.bytes)
    ba_len = len(ba)
    buffer = (ctypes.c_uint8 * ba_len).from_buffer(ba)
    return buffer

bytes(注:インスタンスを ctypes バイト配列に変換する場合も同じことが当てはまります。 を削除するだけ.bytesですdata.bytes)。

次に、次を使用してバッファを C 関数に渡すことができますbyref

byref(buffer)
于 2015-04-01T14:19:53.123 に答える