题目描述:
TLV 编码是按 [ Tag Length Value ] 格式进行编码的,一段码流中的信元用Tag标识, Tag在码流中 唯一不重复 ,Length表示信元Value的长度,Value表示信元的值。
码流以某信元的Tag开头,Tag固定占 一个字节,Length固定占 两个字节,字节序为 小端序 。
现给定TLV格式编码的码流,以及需要解码的信元Tag,请输出该信元的Value。
输入码流的16进制字符中,不包括小写字母,且要求输出的16进制字符串中也不要包含小写字母;
码流字符串的最大长度不超过50000个字节。
输入描述:
输入的第一行为一个字符串,表示待解码信元的 Tag ;
输入的第二行为一个字符串,表示待解码的 16进制码流 ,字节之间用 空格分隔 。
输出描述:
输出一个字符串,表示待解码信元以16进制表示的 Value 。
int main(int argc, char *argv[]) {
char a[2]={0},b[50000]={0},c[25000]={0},*q,tmp[50000]={0};
int idx=0;
gets(a);
gets(b);
char* p=b;
while(*p!='\0'){
if(*p!=' '){
c[idx]=*p;
p++;idx++;
}
else
p++;
}
q=&c[3];
// printf("%d\n",*q);
while(*q!='\0'){
if(*(q-3)==a[0]&&*(q-2)==a[1]){
memcpy(tmp,q+3,(*q-'0')*2);
q=q+6+(*q-'0')*2;
}
q=q+6+(*q-'0')*2;
}
for(int i=0;i<=strlen(tmp);i++){
if(i%2==0&&i!=0)
printf(" ");
printf("%c",tmp[i]);
}
return 0;
}