在python中使用c_type时出现little-endian的问题
项目中需要组装与解析底层通信协议中定义的数据包,为此使用了python中的c_type类来定义一个协议包的具体内容,例如,协议中数据包的描述如下,
字段名称 | 长度(bytes) |
命令字 | 2 |
类型 | 1 |
数据1 | 4 |
数据2 | 2 |
python中的定义,
class EProfile(Structure): _pack_ = 1 _fields_ = [('command_id', c_short), ('type', c_ubyte), ('data1', c_int), ('data2', c_short)]
其中c_short为2字节,c_ubyte为1字节,c_int为4字节。但是组装好数据,转换为字节流之后却发现,多字节的字段是用little-endian格式存储的。比如,命令字值如果是1000的话,那么转换成2字节十六进制数为0x03E8,然而字节流中输出的却是0xE803。
解决方案:把基类Structure换成BigEndianStructure即可解决。