华为OD机试,C语言实现:TLV解析Ⅰ

题目描述:
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;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值