Python 使用ctypes实现union时的困惑
我正试图用ctypes编写一个联合代码,但它没有给出所需的输出 所给代码:Python 使用ctypes实现union时的困惑,python,c,unions,Python,C,Unions,我正试图用ctypes编写一个联合代码,但它没有给出所需的输出 所给代码: #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; } 我试着这样
#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;
}
我试着这样做:
#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'
不知道为什么会出现这样的错误
有什么方法可以实现它吗?您工会的字段声明不正确。您已经声明了一个名为
“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
512
0
2
您可能打算编写如下代码:
_fields_= [("i", c_int, 16),
("ch", c_byte*2)]
这将ch
声明为长度为2的c_字节的数组
请注意,我使用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]
输出
A
512
0
2
索引器:字符串索引超出范围,因为OP希望将其作为C语言索引。我在回答中指出了一些不起作用的东西。。。顺便说一句,谁在否决这些?为什么选择使用位字段而不是,比如说,c_short
?