二进制数据报文构建与解析

利用 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):
    pass
    message=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):
    pass
    data_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_dict


if __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)

如果对您有帮助,请打赏!谢谢!

猜你喜欢

转载自blog.csdn.net/qq_24624539/article/details/86611914
今日推荐