漫天啊 2023-04-01 21:50 采纳率: 73.3%
浏览 16
已结题

TLV编码,输出该信元的 Value

TLV 编码是按[Tag Length Value]格式进行编码的,一段码流中的信元用 Tag 标识,Tag 在
码流中唯一不重复,Length 表示信元 Value 的长度,Value 表示信元的值。
码流以某信元的 Tag 开头,Tag 固定占一个字节,Length 固定占两个字节,字节序为小端
序。
现给定 TLV 格式编码的码流,以及需要解码的信元 Tag,请输出该信元的 Value。
输入码流的 16 机制字符中,不包括小写字母,且要求输出的 16 进制字符串中也不要包含
小写字母;码流字符串的最大长度不超过 50000 个字节。
输入描述:输入的第一行为一个字符串,表示待解码信元的 Tag;
输入的第二行为一个字符串,表示待解码的 16 进制码流,字节之间用空格分隔。
输出描述:
输出一个字符串,表示待解码信元以 16 进制表示的 Value。

示例 :
输入
31
32 01 00 AE 90 02 00 01 02 30 03 00 AB 32 31 31 02 00 32 33 33 01 00 CC
输出
32 33
说明:需要解析的信元的 Tag 是 31,从码流的起始处开始匹配,Tag 为 32 的信元长度为 1(01 00,
小端序表示为 1);第二个信元的 Tag 是 90,其长度为 2;第三个信元的 Tag 是 30,其长
度为 3;第四个信元的 Tag 是 31,其长度为 2(02 00),所以返回长度后面的两个字节即
可,即 32 33。
求题目讲解,题目没有懂

  • 写回答

1条回答 默认 最新

  • weixin_38875398 2023-04-01 22:18
    关注

    这道题目是一个解析 TLV 格式编码的问题。TLV 格式编码指的是将一段数据按照 "Tag-Length-Value" 的格式编码。其中,Tag 表示该数据的类型,Length 表示该数据的长度,Value 表示该数据的值。在本题中,给定一个 TLV 格式编码的数据流和需要解码的数据的 Tag 值,要求输出对应的 Value。
    具体解题思路如下:
    1.首先,将输入的 TLV 数据流按照空格分割,得到每个字节的值。然后,定义两个指针变量,分别指向数据流的开头和结尾。
    2.接下来,使用一个循环遍历整个数据流,每次取出一个数据元素,解析该元素的 Tag 和 Length 值,并判断该元素的 Tag 是否与需要解码的 Tag 相同。如果相同,则将该元素的 Value 值输出即可。
    3.在解析数据元素的过程中,需要将长度值按照小端序解析。具体来说,需要将两个字节的长度值转换成一个整数,然后再根据该整数解析 Value。

    python
    Copy code
    def decode_tlv(tag, data):
        pos = 0
        while pos < len(data):
            # 读取当前位置的tag
            current_tag = int(data[pos], 16)
            pos += 1
    
            # 读取当前位置的length(注意要按小端序读取)
            current_length = int(data[pos] + data[pos + 1], 16)
            pos += 2
    
            # 如果tag和要查找的tag相同,则返回当前位置的value
            if current_tag == tag:
                return data[pos:pos+2*current_length]
    
            # 否则跳过当前位置的value
            pos += 2 * current_length
    
        # 如果没有找到对应的tag,则返回空字符串
        return ""
    
    # 读入输入数据
    tag = int(input())
    data = input().split()
    
    # 解码数据
    value = decode_tlv(tag, data)
    
    # 输出结果
    print(value)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月1日
  • 已采纳回答 4月1日
  • 创建了问题 4月1日

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题