我已关注C-like structures in Python,我定义了一个继承<div class="carousel-item col-md-3">
的课程CommandHeader
。
ctypes.Structure
但是我有另一个要求就是将这个类似C的结构转换成字节。
所以我必须使用class CommandHeader(Structure):
"""
struct {
uint8_t key;
uint8_t flag;
uint16_t command;
uint16_t length;
uint16_t req_id;
}
"""
_fields_ = [
('key', c_uint8),
('flag', c_uint8),
('command', c_uint16),
('length', c_uint16),
('req_id', c_uint16),
]
模块并定义两个struct
和pack
的成员函数。
unpack
此代码可以正常工作。
但我认为class CommandHeader(Structure):
"""
struct {
uint8_t key;
uint8_t flag;
uint16_t command;
uint16_t length;
uint16_t req_id;
}
"""
_fields_ = [
('key', c_uint8),
('flag', c_uint8),
('command', c_uint16),
('length', c_uint16),
('req_id', c_uint16),
]
def pack(self):
return struct.pack('!BBHHH', self.key, self.flag, self.command, self.length, self.req_id)
def unpack(self, data):
self.key, self.flag, self.command, self.length, self.req_id = struct.unpack('!BBHHH', data)
和pack
成员函数不是很好,因为我必须为每个类unpack
定义这两个成员函数。
此外,如果一个类有很多成员,那么CommandHeader
和pack
成员函数将会非常长,看起来非常难看。
unpack
那么还有更好的方法吗?