如何使用Python 2.7.2将C ++枚举转换为ctypes.Structure?

时间:2013-05-17 16:56:53

标签: c++ python-2.7 enums ctypes

我已经搜索过,但我找不到一个能做我需要做的事的例子 我发现 How can I represent an 'Enum' in Python? 这里是SO,但它不包括ctypes.Structure。 我也找到了 Using enums in ctypes.Structure 在这里SO,但它包括指针,我不熟悉。

我有一个包含typedef枚举的头文件,我需要在Python文件的ctypes.Structure中使用。

C ++头文件:

typedef enum {

        ID_UNUSED,
        ID_DEVICE_NAME,
        ID_SCSI,
        ID_DEVICE_NUM,
} id_type_et; 

Python文件(我目前的方式):

class IdTypeEt(ctypes.Structure):

        _pack_ = 1
        _fields_ = [ ("ID_UNUSED", ctypes.c_int32),
            ("ID_DEVICE_NAME", ctypes.c_char*64),
            ("ID_SCSI", ctypes.c_int32),
            ("ID_DEVICE_NUM", ctypes.c_int32) ]

任何建议都将不胜感激。越简单越好。

1 个答案:

答案 0 :(得分:5)

enum不是结构,它是具有预定义值集(枚举器常量)的整数类型。用ctypes.Structure表示它是没有意义的。你正在寻找这样的东西:

from ctypes import c_int

id_type_et = c_int
ID_UNUSED = id_type_et(0)
ID_DEVICE_NAME = id_type_et(1)
ID_SCSI = id_type_et(2)
ID_DEVICE_NUM = id_type_et(3)