Я пытаюсь перенести код C на Python 3.6, используя библиотеку ctypes
, но мне не удалось создать ctypes.BigEndianStructure
, содержащий ctypes.Union
. Он вызывает TypeError: This type does not support other endian
.
Исключение кажется адекватным, поскольку, глядя на документацию ctypes для класса Union
, ясно сказано, что это базовый класс для объединений в собственный порядок байтов , а мой собственный порядок байтов является прямым порядком байтов (не то, что требуется в данном случае).
Позвольте мне проиллюстрировать мой код.
code.c
:
typedef struct header {
unsigned int a;
unsigned int b;
} header;
typedef struct body {
unsigned int a;
unsigned int b;
} body;
typedef struct structure {
union {
struct header header;
char _fill[0x10];
} header;
union {
struct body body;
char _fill[0x10];
} body;
} structure;
code.py
:
import ctypes
class header(ctypes.BigEndianStructure):
_fields_ = [
('a', ctypes.c_uint),
('b', ctypes.c_uint)
]
class body(ctypes.BigEndianStructure):
_fields_ = [
('a', ctypes.c_uint),
('b', ctypes.c_uint)
]
class _header(ctypes.Union):
_fields_ = [
('header', header),
('_fill', ctypes.c_char*0x10),
]
class _body(ctypes.Union):
_fields_ = [
('body', body),
('_fill', ctypes.c_char*0x10),
]
#class structure(ctypes.Structure): # <-- works, but it is not what I need.
class structure(ctypes.BigEndianStructure): # <-- raises TypeError.
_fields_ = [
('header', _header),
('body', _body),
]
Как продолжить создание структуры?