题目描述:
TLV 编码是按 [ Tag Length Value ] 格式进行编码的,一段码流中的信元用Tag标识, Tag在码流中 唯一不重复 ,Length表示信元Value的长度,Value表示信元的值。
码流以某信元的Tag开头,Tag固定占 一个字节,Length固定占 两个字节,字节序为 小端序 。
现给定TLV格式编码的码流,以及需要解码的信元Tag,请输出该信元的Value。
输入码流的16进制字符中,不包括小写字母,且要求输出的16进制字符串中也不要包含小写字母;
码流字符串的最大长度不超过50000个字节。
输入描述:
输入的第一行为一个字符串,表示待解码信元的 Tag ;
输入的第二行为一个字符串,表示待解码的 16进制码流 ,字节之间用 空格分隔 。
输出描述:
输出一个字符串,表示待解码信元以16进制表示的 Value 。
public static void main(String[] args) {
//输入是一个字符串,第一行表示信元的tag
Scanner in = new Scanner(System.in);
System.out.println("请输入");
boolean hasNext = in.hasNext();
String sign = null;
String code = null;
//取输入
if (hasNext){
sign = in.nextLine();
}
code = in.nextLine();
String[] codes = code.split(" ");
boolean isSign = false;
int index = 0;
while (index < codes.length && !isSign){
if (sign.equals(codes[index])){
isSign = true;
}
//取两个字节获取对应的value的长度
int length = transforInt(codes[index + 1] + codes[index + 2]);
index = index +3 ;
if (isSign){
for (int i = index; i < index+length; i++) {
System.out.print(codes[i]+" ");
}
}
index = index+length;
}
}
static int transforInt(String s){
//传入的小端序的四位0100
char[] chars = s.toCharArray();
int[] numnbers = new int[chars.length];
for (int i = 0; i < chars.length; i++) {
if (chars[i]>=48&&chars[i]<65){
numnbers[i] = chars[i]-48;;
}else{
numnbers[i]=(chars[i]-65+10);
}
}
return numnbers[0]*16 +numnbers[1]+numnbers[2]*16*16*16+numnbers[3]*16*16;
}
原文链接:https://blog.csdn.net/weixin_44052055/article/details/123903244