2

Pythonに書き込んだCコードをマッサージするために、ctypesを少しいじっています。Cコードは構造体と共用体に大きく依存しており、今のところ、Pythonでの簡単な解決策は、ctypesを介してそれらをサブクラス化することです。

つまり、これから:

struct foo {
    uint32_t a;
    uint32_t b;
    uint16_t c;
    uint16_t d;
};


これに:

from ctypes import *

class Foo(Structure):
    _fields_ = [("a", c_uint),
                ("b", c_uint),
                ("c", c_ushort),
                ("d", c_ushort)]

ただし、__repr__()定義をPythonクラスrepr()に入れてからインスタンスで使用すると、返されるのは<class 'Foo'>(または、そのための何か、ここでメモリから少し思い出す)だけです。

repr()したがって、PythonとCの間で両方の世界を活用して最大限に活用する方法があるのか​​、それともメタクラスを調べて、structバイトを適切なPythonクラスにパック/アンパックするためにライブラリを使用する必要があるのか​​疑問に思います。

考え?

4

1 に答える 1

2

私はその問題を本当に理解していません。これは問題なく機能します。

from ctypes import *

class Foo(Structure):
    _fields_ = [("a", c_uint),
                ("b", c_uint),
                ("c", c_ushort),
                ("d", c_ushort)]

    def __repr__(self):
        return "<Foo: a:%d b:%d c:%d e:%d>" % (self.a, self.b, self.c, self.d)

f = Foo(1,2,3,4)
print repr(f)

# <Foo: a:1 b:2 c:3 e:4>

あなたがする場合のみ:

print repr(Foo)

あなたは

<class '__main__.Foo'>

または同様のもの。

reprインスタンスで使用してもよろしいですか?

于 2012-05-22T20:57:58.963 に答える