MCU接收串口字符型数据转换成数据型数据

转自: http://blog.csdn.net/langaopeng/article/details/7672252

做MCU开发时,常常碰到串口接收的数据是字符型数据,是ASCII码,而我们需要解析的是数据型的。如:串口接收到的是:"-236,854,635"这个字符串。而我们需要将这个字符串解析为:int 的-236,854,635才能为我所用。

以下是实现功能的子函数。

 

// 功能:串口接收的数据是字符型数据,是ASCII码,而我们需要解析的是数据型的
// 如:串口接收到的是:"-236,854,635"这个字符串。而我们需要将这个字符串解析为:int 的-236,854,635才能为我所用
void PutCharTOdata(double *dTabDest,unsigned char *rev_tab,unsigned char rev_count)//   tab[ ] 为转换后的数据,rev_tab[ ]为转换前的一个个字符,rev_count为字符串长度(字符的个数)
{
	unsigned char i;
	unsigned char pflag  = 0;
	unsigned char point  = 0;
	unsigned char F_flag  =0;

	// 清空结果数组
	for(i = 0; i < 10; i++) dTabDest[i] =0.0;

	for(i = 0; i < rev_count; i++)
	{
		if((F_flag==0) && (rev_tab[i] == '-'))//判断是否为负号
		{
			F_flag = 1;
		}  
		else if(rev_tab[i] != ',')//判断是否碰到逗号
		{
			if(rev_tab[i] != '.')//判断是否碰到小数点
			{
				if(pflag)
				{
					dTabDest[point] = (double)(rev_tab[i]-0x30)/(pow((long double)10,(long)pflag))+dTabDest[point];
					pflag ++;
				}
				else
				{                    
					dTabDest[point] = (rev_tab[i]-0x30)+dTabDest[point]*10;
				}
			}
			else
			{
				pflag ++;
			}
		}
		else if(rev_tab[i]==',')
		{

			if(F_flag ==1) dTabDest[point] =  -dTabDest[point];
			point++;
			pflag =0;
			F_flag = 0;
		}
	}

	if(F_flag ==1) dTabDest[point] = -dTabDest[point];
}


 

 

此函数的功能为将rev_tab[ ] = "-236,854,635";这个字符串解析为了:

tab[0] =-236;

tab[1] = 854;

tab[2] = 635;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值