我在C ++中有一个如此定义的结构:
typedef struct __attribute__((packed)){
uint16_t nb_elements; //2 bytes
struct __attribute__((packed)){ // 6 bytes
uint8_t identifier1; // 1 byte
uint8_t identifier2; // 1 byte
float my_data; // 4 bytes
} element[];
} sElements;
(注意element
结构嵌套在sElements
结构中)。
我想用Python做同样的事情(使用ctypes),我现在正在努力:
from ctypes import *
class element(Structure):
_fields_ = [("identifier1", c_uint, 8),
("identifier2", c_uint, 8),
("my_data", c_float, 64)]
class sElements(Structure):
_fields_ = [("nb_elements", c_uint, 16)
#I don't know what to put here !
]
我怎样才能在Python中重现这个嵌套结构数组?
答案 0 :(得分:1)
这是我做的,它并没有完全回答这个问题,但它解决了我的问题:(使用bitstring)
import bitstring
class element():
def __init__(self):
self.identifier1 = None #uint:8
self.identifier2 = None #uint:8
self.my_data = None #float:64
def serialize(self):
return bitstring.pack('uint:8, uint:8, float:64', self.identifier1, self.identifier2, self.my_data)
class sElements():
def __init__(self):
self.nb_elements = None #uint:16
self.element = [] #element list
def serialize(self):
serialized = bitstring.pack('uint:16', self.nb_elements)
for elt in self.element:
serialized += elt.serialize()
return serialized
模块化可能的字节序问题,它允许以我想要的方式存储这些数据(并发送它们)。