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+'))