【编程题目 | 100分】TLV解析


相似题目 TLV解析

https://www.online1987.com/tlv2/


本题可使用本地IDE编码,不能使用本地已有代码。无跳出限制,

编码后请点击 保存并提交 按钮进行代码提交。


时间限制:C/C++ 1000ms | 其他语言 2000ms

空间限制:C/C++ 128MB | 其他语言 256MB

64bit IO Format:%lld


题目描述

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。


样例解释



JAVA解法一


import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class TLV {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String tag = sc.nextLine();
        String stream = sc.nextLine();
        Map<String, Inner> map = new HashMap<>();

剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看

JAVA解法二


剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看

C++


#include <bits/stdc++.h>

using namespace std;

#define IOS cin.sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define SZ(x) ((int)(x).size())
typedef pair<int, int> pii;
typedef pair<int, char> pic;
typedef pair<int, string> pis;

void SplitString(string input, vector<int> &output, string pattern);

class Solution {
public:

    // 待实现函数,在此函数中填入答题代码;

剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看

Python解法一


剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看

Python解法二


while 1:
    try:
        Tag = input()

        dct = {}
        nums = input().split()

剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看


Python解法三


Tag = int(input())  # 待解码信元的tag
Lists = input().split()  # 待解码的16进制码流

剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看


JavaScript


let str = '32 01 00 AE 90 02 00 01 02 30 03 00 AB 32 31 31 02 00 32 33 33 01 00 CC'

剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看