使用Python 3.5.2处理十六进制字符串转换为浮点数

来源:互联网 发布:java 内部类的作用 编辑:程序博客网 时间:2024/06/04 03:35

1.此程序主要用来进行报文翻译;

2.参考文献:http://blog.csdn.net/w83761456/article/details/21171085;

3.

"""    作者:桑文超    功能:解析昌盛集控报文    版本:V1.0    日期:2017-12-26"""from struct import unpackimport datetimeprint('***************************************************')author = '桑文超'software_function = '解析昌盛集控报文'version = 'V1.0'date = '2017-12-26'a = datetime.datetime.now()print('作者:{}\n\n软件功能:{}\n\n版本:{}\n\n日期:{}\n'.format(author,software_function,version,date))print('当前时间:{}'.format(a))print('***************************************************')def main():    #输入报文,去除空格    message_str = input('请输入:')    while message_str != 'Q' :        nospace_message_str = message_str.replace(' ','')        #计算包长度        pack_length_str = nospace_message_str[4:8]        pack_length = unpack('<h',bytes.fromhex(pack_length_str))[0]        print('包长度:{}'.format(pack_length))        #计算厂站号        station_no_str = nospace_message_str[8:12]        station_no = unpack('<h', bytes.fromhex(station_no_str))[0]        print('厂站号:{}'.format(station_no))        #计算采集仪地址        collect_adr_str = nospace_message_str[12:16]        collect_adr = unpack('<h', bytes.fromhex(collect_adr_str))[0]        print('采集仪地址:{}'.format(collect_adr))        #计算帧长度        frame_str = nospace_message_str[16:18]        frame = int(frame_str,16)        print('帧长度:{}'.format(frame))        #计算功能码,并判断是遥信还是遥测        function_code_str = nospace_message_str[18:20]        function_code = int(function_code_str, 16)        if function_code == 7 :            code1 = '主动上送遥测'            print('功能码:{},功能:{}'.format(function_code,code1))        else:            code2 = '主动上送遥信'            print('功能码:{},功能:{}'.format(function_code, code2))        #计算设备类型标识,因都是00故没做判断        equipment_str = nospace_message_str[20:22]        equipment = int(equipment_str, 16)        print('设备类型标识:{}'.format(equipment))        #计算信息体地址        information_adr_str = nospace_message_str[22:28]        information_adr = unpack('<hb', bytes.fromhex(information_adr_str))[0]        print('信息体地址:{}'.format(information_adr))        #计算点值        value_str = nospace_message_str[28:-4]        i = 0        s = ''        while i < len(value_str):            s += value_str[i]            i += 1            if i % 8 == 0 :                b = unpack('<f',bytes.fromhex(s))[0]                substation_adr = information_adr-16385                print('集控点号:{},子站点号:{},值为:{}'.format(information_adr,substation_adr,b))                s = ''                information_adr += 1                substation_adr += 1            else:                continue        message_str = input('请输入:')if __name__ == '__main__':    main()

information_adr = unpack('<hb', bytes.fromhex(information_adr_str))[0]

bytes.fromhex(str) 用来将字符串转换为

unpack()结果为一个元组,所以输出的时候在后面会添加[0]代表输出元组中0号位的元素

‘<hb’ 要参考下表:




因我取出的数据为 ‘094700’,只占用3个字节,实际使用应该是004709,所以我用'<',代表使用小端法,作用是将094700转换为004709,而‘hb’是用来存储3个字节的

详细内容可参考:https://docs.python.org/3.5/library/struct.html?highlight=struct#module-struct


阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 关怀 智能关怀 关怀备至 智能关怀app 关怀意思 关怀的意思 亲情关怀 临终关怀养老院 临终关怀学 世界更年期关怀日 关怀app 关怀是什么意思 医学生不配得到关怀 一言一行总关情 一枝一叶总关情全诗 一榫一卯总关情阅读答案 陈塘关总兵 总有病娇想关我 总有刁民想害朕第十关怎么过 一支一叶总关情 天然气总阀门需要关吗 总关情的诗句 一枝一叶总关情暗示什么意思 暴走大侠明教总坨40关怎么打 暴走大侠明教总舵40关怎么过 天然气用完要关总阀吗 暴走大侠明教总舵 关悦 关悦图片 关悦简历 关悦内裤 关悦照片 关悦写真 关悦胸 关悦个人资料 关悦高清胸图 关悦全身照片 关悦个人写真 关悦个人资料图片 关越 萧关逢候骑都护在燕然