计算协议长度

计算协议长度

在协议中,组建内容需要得到协议内容的长度。如果在长度写入固定的值,那么修改内容之后也要相应的修改长度。那么如何通过程序自动得到长度值呢?

u8 子函数
{

	u8 hex_len = 0;
	u8 transBuf[4] = {0},lastBuf[4] = {0};
	u16 len = 0,ls_dd = 0,dlen = 0;

	dlen = len;
	buf[len++] = 0x00;				//长度高位先写0
	buf[len++] = 0x00;				//长度低位先写0
	buf[len++] = .......			//协议内容
	......
	
	ls_dd = len  - dlen + 2;	//需要计算的长度 (这里不能硬抄,要根据实际情况)
	hex_len = change_DEC_to_HEX(ls_dd,transBuf);	//将10进制转为16进制数组,并得到16进制长度
	char_string_right(transBuf,hex_len,lastBuf,2);	//右对齐
	buf[dlen] = lastBuf[0];				//赋计算出来的长度值hex 高位
	buf[dlen + 1] = lastBuf[1];			//赋计算出来的长度值hex 低位	

	return len;

}

u8 change_DEC_to_HEX(u32 dec,u8 *h_buff)
{

	int i = 0,len = 0;
	//得到hex长度
	if(dec < 255) 
		len = 1;
	else if(dec < 65535)
		len = 2;
	else if(dec < 16777215) 
		len = 3;
	else if(dec <= 4294967294)
	    len = 4;
    else 
        len = 0;

	for(i = 0;i < len;i++)
	{
		h_buff[i] = dec >> (8 * (len - 1 - i));
	}
	return len;

}

void char_string_right(unsigned char *s_chr,unsigned int s_len,unsigned char *t_chr,int t_len){

	int i = 0,tw = 0,sw = 0;

	if(s_len == 0){
		for(i = 0;i < t_len;i++)
			t_chr[i] = 0;
		return;
	}

	tw = t_len - 1;
	sw = s_len - 1; 
	for(i = 0;i < s_len;i++){					//右对齐
		t_chr[tw --] = s_chr[sw -- ];
	}
	tw = t_len - s_len;							//左侧补零
	for(i = 0;i < tw;i++){
		t_chr[i] = 0;
	}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值