在python中使用c_type时出现little-endian的问题

项目中需要组装与解析底层通信协议中定义的数据包,为此使用了python中的c_type类来定义一个协议包的具体内容,例如,协议中数据包的描述如下,

字段名称长度(bytes)
命令字2
类型1
数据14
数据22

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即可解决。

转载于:https://www.cnblogs.com/rucnevermore/p/8710201.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值