def Data(DataDescribe, args): try: DataDescribe = str(int(DataDescribe, 16)).zfill(2) if DataDescribe == '00': print('NULL', DataDescribe) return args elif DataDescribe == '01': print('array:', DataDescribe, end=' ') len1 = int(args[0], 16) lenori = len1 args = args[1:] while len1 > 0: args = Data(args[0], args[1:]) len1 -= 1 print('Data', args) return args elif DataDescribe == '02': print('structure: ', DataDescribe) len2 = int(args[0], 16) lenori = len2 args = args[1:] print('len:', len2) while len2 > 0: args = Data(args[0], args[1:]) len2 -= 1 print('Data', args) return args elif DataDescribe == '03': print('bool:', DataDescribe) elif DataDescribe == '04': print('bit-string:', DataDescribe) value = Comm.list2str(args[1:3]) print('value', Comm.list2str(value)) return args[3:] elif DataDescribe == '05': print('double-long: ', DataDescribe) value = int(args[0] + args[1] + args[2] + args[3], 16) if value > 2147483647: value = Comm.Inverse_code(bin(value)) value = int(value, 2) + 1 value = -value print('value', value) return args[4:] elif DataDescribe == '06': # 4byte print('double-long-unsigned: ', DataDescribe) value = int(args[0] + args[1] + args[2] + args[3], 16) if value > 2147483647: value = Comm.Inverse_code(bin(value)) value = int(value, 2) + 1 value = -value print('value', value) return args[4:] elif DataDescribe == '09': print('octet-string: ', DataDescribe) elif DataDescribe == '10': print('visible-string: ', DataDescribe) elif DataDescribe == '12': print('UTF8-string:', DataDescribe) elif DataDescribe == '15': print('integer:', DataDescribe) elif DataDescribe == '16': print('long: ', DataDescribe) value = int(args[0] + args[1], 16) if value > 32767: value = Comm.Inverse_code(bin(value)) value = int(value, 2) + 1 value = -value print('value', value) return args[2:] elif DataDescribe == '17': print('unsigned:', DataDescribe) elif DataDescribe == '18': print('long-unsigned:', DataDescribe) value = int(args[0] + args[1], 16) if value > 32767: value = Comm.Inverse_code(bin(value)) value = int(value, 2) + 1 value = -value print('value', value) return args[2:] elif DataDescribe == '20': print('long64: ', DataDescribe) elif DataDescribe == '21': print('long64-unsigned', DataDescribe) elif DataDescribe == '22': print('enum', DataDescribe) elif DataDescribe == '23': print('float32', DataDescribe) elif DataDescribe == '24': print('float64', DataDescribe) elif DataDescribe == '25': print('date_time', DataDescribe) elif DataDescribe == '26': print('date', DataDescribe) elif DataDescribe == '27': print('time', DataDescribe) elif DataDescribe == '28': print('DataDescribe:', DataDescribe, 'date_time_s', end=' ') year = int(args[0] + args[1], 16) mouth = int(args[2], 16) day = int(args[3], 16) global hour, hour_, minute, minute_ hour = int(args[4], 16) hour_ = hour minute = int(args[5], 16) minute_ = minute second = int(args[6], 16) datatime = str(year) + '年' + str(mouth) + '月' + str( day) + '日' + ' ' + str(hour).zfill(2) + ':' + str( minute).zfill(2) + ':' + str(second).zfill(2) print(datatime) global Daily_freeze Daily_freeze = '1c' + Comm.list2str(args[0:7]) # 冻结返回时间 print('Daily_freeze', Daily_freeze) global Difference Difference = abs( int(time.strftime('%m%d'), 10) - (mouth * 100 + day)) return args[7:] elif DataDescribe == '80': print('OAD ', DataDescribe) elif DataDescribe == '82': print('ROAD ', DataDescribe) elif DataDescribe == '83': print('OMD ', DataDescribe) elif DataDescribe == '84': print('TI', DataDescribe) timeUnit = int(args[0], 16) times = int(args[1] + args[2], 16) if timeUnit == 1: print(times, '分钟') return args[3:] elif DataDescribe == '85': print('TSA', DataDescribe) value = args[0:8] print('TSA', value) return args[8:] elif DataDescribe == '86': print('MAC', DataDescribe) elif DataDescribe == '87': print('RN', DataDescribe) elif DataDescribe == '88': print('Region', DataDescribe) elif DataDescribe == '89': print('Scaler_Unit ', DataDescribe) elif DataDescribe == '90': print('RSD', DataDescribe) elif DataDescribe == '91': print('CSD', DataDescribe) elif DataDescribe == '92': print('MS', DataDescribe) elif DataDescribe == '93': print('SID', DataDescribe) elif DataDescribe == '94': print('SID_MAC', DataDescribe) elif DataDescribe == '95': print('COMDCB', DataDescribe) elif DataDescribe == '96': print('RCSD', DataDescribe) else: print('ERROR on Data') except: traceback.print_exc(file=open('bug.txt', 'a+'))