JT/T 809-2011 (上级平台解析下级平台上传的车辆拍照数据) 数据转义有个小坑需要注意


'''
  5A01 -> 5B
  5A02 -> 5A
  5E01 -> 5D
  5E02 -> 5E
  
  #坑点
      FFF5A01FFFF  -> FFF5A01FFFF #实际上是FF F5 A0 1F 这几个字节,构不成转义,在字符串里面,这几个字符恰好构成了5A01的模式,不应该转化
      FFFF5A01FFFF -> FFFF5BFFFF  #FF FF 5A 01 这几个字节,应该转义
'''
def str_replace(str_val):
    str_val_list = list(str_val)
    res_str_list = []
    
    src_index = 0 #原数组指针
    for i in range(0, len(str_val_list) - 4, 2):
        
        ##判断是否存在转义字符,如果有转义字符,则将转义字符类型存储在str_kind里面
        str_kind = '' #特殊转义字符标记
        if str_val_list[i] == '5':
            if str_val_list[i+1] == 'A': #5A
                if str_val_list[i+2] == '0':
                    if str_val_list[i+3] == '1':#5A01
                        str_kind = 'B'
                    elif str_val_list[i+3] == '2':#5A02
                        str_kind = 'A'
            elif str_val_list[i+1] == 'E': #5E
                if str_val_list[i+2] == '0':
                    if str_val_list[i+3] == '1':#5E01
                        str_kind = 'D'
                    elif str_val_list[i+3] == '2': #5E02
                        str_kind = 'E'
        #end if
        
        #拷贝字符串
        if src_index == i:#用于跳过处理后的转义字符
            if str_kind == '':#无转义字符
                res_str_list.append(str_val_list[src_index])
                src_index += 1;#跳过1个字符
                res_str_list.append(str_val_list[src_index])
                src_index += 1;#跳过1个字符
            else:#有转义字符
                res_str_list.append('5')
                res_str_list.append(str_kind)
                src_index += 4 #跳过4个字符
        #end if src_index == i
    #end for
                
    #处理最后4个字符
    while(src_index < len(str_val_list)):
        res_str_list.append(str_val_list[src_index])
        src_index += 1;#跳过1个字符
            
    return ''.join(res_str_list)

 

你可能感兴趣的:(JT809)