最近在做VB串口上位机,其中一个问题就是:如何将串口收到的字符串原样转换为整型:
比如:收到“12345” 赋值给变量就是12345
在VC6.0环境下验证通过:(参靠了这位帅哥的:http://zz.csdn.net/bin/logs.php)
#include<iostream.h>
#include <stdio.h>
#include <string.h>
int mi(unsigned char dat, unsigned char mi)
{
unsigned char i;
int sum = 1;
for(i=0; i<mi; i++)
{
sum = sum * dat;
}
return sum;
}
/****************************************************
*函数:strtoint(char *str,int result)
*输入:unsigned 字符串
*输出:整型数字
*****************************************************/
int strtoint(unsigned char* str,int result)
{ int i,tmp=0; //i,tmp临时变量
int length=strlen((char*)str);//strlen参数为const char*,故强制转换
i=0;
if(str[0]==‘-‘) i=1;
for(;i<length;i++)
{
tmp = str[i]&0x0f; //如果原数组中存放的是ascii码,直接将其转换为数字
result+=tmp*mi(10,length-i-1); //1*100+2*10+3*1
}
if(str[0]==‘-‘) return -result;
return result;
}
void main()
{ unsigned char str[10] = "123456";
int result;
result=0;
result=strtoint(str,result);
printf("输入字符串是:%s\n",str);
printf("输出整型数字:%d\n",result);//123
}
//--------------------------------------------分割线----------------------------
效果图:
这里需要利用一个小子函数的来具体描述1*100+2*10+3*1中10进制随位数的变化:
在main函数中验证通过: