华为机试100分题-TLV解析Ⅰ

这篇博客主要介绍了一道华为机试题,涉及TLV编码的解析问题。题目要求根据给定的Tag从码流中解码出对应的Value,并提供了输入输出示例和解题思路。解题关键在于理解TLV编码格式,以及如何从小端序的码流中提取信息。
摘要由CSDN通过智能技术生成

Java华为机试历年题库,获取方式见

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

相似题目 TLV解析Ⅱ

本题可使用本地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。

说明
1.需要解析的信元的Tag是31,从码流的起始处开始匹配,
2.Tag为32的信元长度为1(01 00,小端序表示为1);
3.第二个信元的Tag是90,其长度为2;
4.第三个信元的Tag是30,其长度为3;
5.第四个信元的Tag是31,其长度为2(02 00),所以返回长度后面的两个字节即可,即32 33。

思路分析
字符串转整数时,可以直接转为对应进制的整数。注意是小端,小的在后面。

样例解释
在这里插入图片描述

Java代码

public class TLVAnalyize1 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String tag = in.nextLine();
        String[] tlv = in.nextLine().split(" ");
        for (int i = 0; i < tlv.length; ) {
            int length = Integer.parseInt(tlv[i + 2] + tlv[i + 1], 16);  // 将字符串的Length转为16进制,小端,需要反过来
            if (tag.equals(tlv[i])) {
                StringBuilder sb = new StringBuilder();
                for (int j = i + 3; j < i + 3 + length; j++) {
                    sb.append(tlv[j]).append(" ");
                }
                System.out.println(sb.toString());
                break;
            } else {
                i += length + 3;
            }
        }
    }
}

更多华为机试题点击👉👉【闲鱼】https://m.tb.cn/h.5zQ8X5H?tk=VBwSWpn16Mq MF7997 「我在闲鱼发布了【京985硕亲自用过整理的,自己以275分过了华为机试,已经帮】」
点击链接直接打开

Java华为机试历年题库,获取方式见


整理不易,关注和收藏后拿走!
欢迎专注我的公众号:AdaCoding

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值