当前位置: 首页 > news >正文

2024_E_100_TLV解码

TLV解码
题目描述
TLV编码是按[Tag Length Value]格式进行编码的,一段码流中的信元用Tag标识,Tag在码流中唯一不重复,Length表示信元Value的长度,Value表示信元的值。

码流以某信元的Tag开头,Tag固定占一个字节,Length固定占两个字节,字节序为小端序。

现给定TLV格式编码的码流,以及需要解码的信元Tag,请输出该信元的Value。

输入码流的16进制字符中,不包括小写字母,且要求输出的16进制字符串中也不要包含小写字母;码流字符串的最大长度不超过50000个字节。

输入描述
输入的第一行为一个字符串,表示待解码信元的Tag;
输入的第二行为一个字符串,表示待解码的16进制码流,字节之间用空格分隔。
输出描述
输出一个字符串,表示待解码信元以16进制表示的Value。
用例1
输入
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。

def func():while True:try:def decode_tlv(tag, code_stream):#将输入的16进制码流转换为字节数组code_stream = bytes.fromhex(code_stream.replace(" ",""))#遍历码流,找到与输入的tag相同的位置i = 0while i < len(code_stream):if code_stream[i] == int(tag,16):#找到对应的tag后,后去接下来的两个字节作为lengthlength = int.from_bytes(code_stream[i+1 : i+3], byteorder='little')#根据长度值,获取后续的value部分value = code_stream[i+3:i+3+length]#将value部分转化为16进制字符串返回#print(value.hex().upper())return value.hex().upper()i += 3 + int.from_bytes(code_stream[i + 1:i + 3], byteorder='little')#如果没找到tagreturn Noneexcept EOFError:breakif __name__ == '__main__':print(func())

2
1 01 00 AA 2 02 00 AB AC
输出
AB AC
用例2
输入
1
1 01 01 AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA
输出
AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA
用例4
输入
2
1 01 00 32 2 02 00 43 44
输出
43 44
用例5
输入
22
1 01 00 32 2 02 00 43 44 22 0A 00 1 2 3 4 5 6 7 8 9 10
输出
1 2 3 4 5 6 7 8 9 10
用例6
输入
1
1 02 00 1 2
输出
1 2
用例7
输入
8
1 01 00 1 2 02 00 1 2 3 03 00 1 2 3 4 04 00 4 3 2 1 5 05 00 5 4 3 2 1 6 06 00 6 5 4 3 2 1 7 07 00 7 6 5 4 3 2 1 8 08 00 8 7 6 5 4 3 2 1 9 08 00 8 8 6 5 4 3 2 1
输出
8 7 6 5 4 3 2 1
用例9
输入
10
0A 01 00 32 0B 02 00 46 34 10 03 00 12 13 14
输出
12 13 14
用例10
输入
15
15 08 00 4 7 3 5 5 2 4 10 3 07 00 3 4 3 3 6 2 1 2 09 00 2 2 2 1 1 8 9 5 7 12 02 00 1 2
输出
4 7 3 5 5 2 4 10
用例11
输入
30
18 06 00 5 9 10 6 3 2 30 06 00 5 8 5 6 5 1 24 02 00 2 3 13 04 00 5 9 4 7 20 06 00 1 1 3 10 8 1 23 09 00 3 4 3 8 1 1 4 1 9 2 06 00 3 6 10 5 10 7 18 05 00 3 1 1 6 3 12 01 00 3 13 0A 00 10 8 5 3 5 10 10 10 7 1 30 09 00 9 5 8 10 10 8 1 6 1 13 01 00 9 2 07 00 9 2 10 2 8 7 5 17 03 00 8 5 5 14 03 00 1 6 8 3 04 00 8 10 9 2 13 06 00 5 3 2 6 7 9
输出
5 8 5 6 5 1
用例12
输入
18
30 09 00 1 2 4 7 6 10 9 9 10 3 02 00 5 5 28 07 00 8 1 9 9 10 3 4 19 06 00 10 10 9 2 8 6 21 07 00 4 10 8 2 8 3 10 12 03 00 1 2 4 20 08 00 3 7 1 1 1 6 4 9 18 02 00 9 9
输出
9 9
用例13
输入
26
4 03 00 6 10 7 9 08 00 9 8 2 10 3 1 9 8 14 08 00 8 5 5 4 4 1 5 4 28 07 00 2 10 2 7 5 2 3 17 01 00 3 2 07 00 4 9 1 1 2 2 5 8 04 00 3 10 10 8 12 08 00 1 8 6 10 10 7 9 7 26 08 00 10 3 9 8 4 9 1 3 26 05 00 5 4 8 7 8 24 07 00 1 9 6 4 7 5 3
输出
10 3 9 8 4 9 1 3
用例15
输入
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


http://www.mrgr.cn/news/51731.html

相关文章:

  • 51单片机的智能水箱液位控制系统【proteus仿真+程序+报告+原理图+演示视频】
  • 新乡医学院第一附属医院启动巨额医疗设备整体维保招标
  • linux证明变量扩展在路径名扩展之前执行
  • 个人主页模版(源代码开源)
  • 值得推荐的五款数据恢复工具!!
  • MySQL之CRUD(上)
  • Shiro认证(Authentication)
  • 【Spring】Spring实现加法计算器和用户登录
  • conda环境打包环境、迁移环境
  • UnityAPK反编译基础修改,C#反编译
  • 力扣3194.最小元素和最大元素的平均最小值
  • mysql语句简单的使用
  • Invoke 和 InvokeRequired以及他们两个的区别
  • Linux基础命令系列一小白必掌握
  • 小O睡眠省电调研
  • 代理商培训新策略:利用内部知识库提升培训效果
  • FreeRTOS:信号量
  • 神仙级网络安全入门教程(非常详细),从零基础入门到精通,从看这篇开始!
  • 05 线性结构——队列(特性、入队与出队、顺序队列和链式队列、顺序队列的“假溢出”问题及解决方案、相关功能的定义与代码实现)
  • 集合框架10:泛型接口、泛型方法