在 ctypes.Structure 中使用枚举
我有一个通过 ctypes 访问的结构:
struct attrl {
char *name;
char *resource;
char *value;
struct attrl *next;
enum batch_op op;
};
到目前为止,我的 Python 代码如下:
# struct attropl
class attropl(Structure):
pass
attrl._fields_ = [
("next", POINTER(attropl)),
("name", c_char_p),
("resource", c_char_p),
("value", c_char_p),
但我不确定 batch_op
枚举使用什么。我应该将其映射到 c_int
还是?
I have a struct I'm accessing via ctypes:
struct attrl {
char *name;
char *resource;
char *value;
struct attrl *next;
enum batch_op op;
};
So far I have Python code like:
# struct attropl
class attropl(Structure):
pass
attrl._fields_ = [
("next", POINTER(attropl)),
("name", c_char_p),
("resource", c_char_p),
("value", c_char_p),
But I'm not sure what to use for the batch_op
enum. Should I just map it to a c_int
or ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
至少对于 GCC 来说
enum
只是一个简单的数字类型。它可以是 8 位、16 位、32 位、64 位或任何位(我已经使用 64 位值对其进行了测试)以及有符号或无符号。我猜它不能超过long long int
,但实际上你应该检查enum
的范围并选择c_uint
之类的东西。这是一个例子。 C 程序:
和 Python 程序:
At least for GCC
enum
is just a simple numeric type. It can be 8-, 16-, 32-, 64-bit or whatever (I have tested it with 64-bit values) as well assigned
orunsigned
. I guess it cannot exceedlong long int
, but practically you should check the range of yourenum
s and choose something likec_uint
.Here is an example. The C program:
and the Python one:
使用
c_int
或c_uint
就可以了。或者,食谱中有一个枚举类的食谱。Using
c_int
orc_uint
would be fine. Alternatively, there is a recipe in the cookbook for an Enumeration class.