gpt4 book ai didi

python - 使用 ctypes 实现 union 的困惑

转载 作者:太空宇宙 更新时间:2023-11-04 02:51:38 25 4
gpt4 key购买 nike

我正在尝试使用 ctypes 编写 union 代码,但它没有给出所需的输出...

给出的代码:

#include<stdio.h>
int main()
{
union a
{
int i;
char ch[2];
};
union a key;
key.i=512;
printf("%d\n",key.i);
printf("%d\n",key.ch[0]);
printf("%d\n",key.ch[1]);
return 0;
}

预期输出:

512
0
2

我试过:

#Demo of union at work
from ctypes import *
class a(Union):
_fields_= [("i", c_int, 16),
("ch[2]",c_char)]
key=a()
key.i=512
print key.i
print key.ch[0]
print key.ch[1]

AttributeError: 'a' object has no attribute 'ch'

不知道为什么会报错?

有什么实现方法吗?

最佳答案

您的 union 字段声明不正确。您已经声明了一个名为 "ch[2]" 的属性。

为了证明这一点,请看一下您程序的这个变体:

#Demo of union at work
from ctypes import *
class a(Union):
_fields_= [("i", c_int, 16),
("ch[2]",c_char)]
key=a()
key.i = 65
print getattr(key, "ch[2]")

输出

A

您可能打算编写如下代码:

_fields_= [("i", c_int, 16),
("ch", c_byte*2)]

这里声明 ch 是一个长度为 2 的 c_byte 数组。

请注意,我使用 c_byte 代替 c_char,因为您需要的是整数类型而不是字符。

所以,这是更正后的程序:

#Demo of union at work
from ctypes import *
class a(Union):
_fields_= [("i", c_int, 16),
("ch",c_byte*2)]
key=a()
key.i=512
print key.i
print key.ch[0]
print key.ch[1]

输出

512
0
2

关于python - 使用 ctypes 实现 union 的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21518837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com