Python 使用ctypes实现union时的困惑

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; } 我试着这样

我正试图用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;
}
我试着这样做:

#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