二进制数据报文构建与解析
利用 Python 标准库中的 struct 模块实现二进制数据报文的构造与解析。完成两个内容:
(1)构建报文:
函数原型: def pack_message(data_dict)
参数 data_dict:报文字段值,为字典类型,例如:
{'type': 50, 'csum': 1, 'id': 'abcdefghigklmnop', 'dis1': 300, 'dis2': 100, 'count': 20}
返回值:二进制报文的字节序列。
报文格式如下:共 27 字节
消息类型(type, 1 字节, 0-100 的整数) || 数据校验字节(csum, 1 字节,后续的数
据部分字节加法和) || 禁飞区 ID(16 个字符,可按 UTF8 编码) | 禁飞区预警距离(dis1,
整数, 4 字节,大端序) | 禁飞区告警距离(dis2,整数, 4 字节,大端序) | 禁飞区 1 点
数(count, 1 字节, 0-255 整数)
(2)解析报文:
函数原型: def pack_message(message)
参数 message:经 pack_message 生成的二进制序列。
返回值:字典类型,包含有解析出来的数据。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import struct
import binascii#10.二进制数据报文构建与解析
#(1)构建报文
def pack_message(data_dict):passmessage=struct.pack('>i i 16s i i i',data_dict['type'],data_dict['csum'],bytes(data_dict['id'].encode('utf-8')),data_dict['dis1'],data_dict['dis2'],data_dict['count'])# print(binascii.hexlify(message))return message#(2)解析报文
def uppack_message(message):passdata_dict={}data_dict['type'], data_dict['csum'],data_dict['id'], data_dict['dis1'], data_dict['dis2'], data_dict['count']=struct.unpack('>i i 16s i i i',message)return data_dictif __name__ == '__main__':pass##(1)构建报文data_dict={'type': 50, 'csum': 1, 'id': 'abcdefghigklmnop', 'dis1': 300, 'dis2': 100, 'count': 20}message=pack_message(data_dict)print (binascii.hexlify (message))data_dict=uppack_message(message)print(data_dict)
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
