转自: 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;