我正在尝试使用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'
不知道为什么会出错?
任何实现它的方法?
答案 0 :(得分:2)
你的联盟字段声明不正确。您已声明了名为"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
声明为c_byte
的数组,长度为2.
请注意,我使用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