如何定义一个类似C的结构在Python中更加pythonic?

时间:2018-03-01 02:20:36

标签: python ctypes

我已关注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), ] 模块并定义两个structpack的成员函数。

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定义这两个成员函数。

此外,如果一个类有很多成员,那么CommandHeaderpack成员函数将会非常长,看起来非常难看。

unpack

那么还有更好的方法吗?

0 个答案:

没有答案