每日一道算法题 15(2023-12-28)TLV解析Ⅰ

文章讲述了在Java程序中,如何解析带有特定格式(如TLV)的十六进制字符串,尤其是在遇到值两个字节顺序对进制转换影响导致的数据异常情况时的处理方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.tarena.test.B20;

import java.util.ArrayList;
import java.util.Scanner;
import java.util.StringJoiner;

/**
 * TLV解析Ⅰ
 * @author Administrator
 * 输入:
 *     第一行  31
 *  第二层  32 01 00 AE 90 02 00 21 02 30 03 00 AB 32 31 31 02 00 32 33 01 22 CC
 * 
 */
public class B27 {
    
    public static void main(String[] args) {
        try(Scanner sc = new Scanner(System.in)){
            String tag = sc.nextLine();
            String[] stream16 = sc.nextLine().split(" ");
            System.out.println(resultStr(tag,stream16));
        }
    }
    
    public static String resultStr(String tagKey,String[] stream16) {
        int index = 0;
        while(index<stream16.length) {
            String tag = stream16[index++];
            
            String len1 = stream16[index++];
            String len2 = stream16[index++];
            //注意是 len2+len1 不是len1+len2
            int len = Integer.parseInt(len2+len1, 16);
            if(tag.equals(tagKey)) {
                StringJoiner sj = new StringJoiner(" ");
                for(int j=0;j<len;j++) {
                    sj.add(stream16[index++]);
                }
                return sj.toString();
            }else {
                index+=len;
            }
        }
        return null;
    }

}

了解知识点

1、题目中 value 两个字节的拼接顺序,拼接想法 转进行进制转换时,数据是异常的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值