漫天啊 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 解决一个加好友限制问题 或者有好的方案
  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?