|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
小明-陕西:
问下,我想串口发送这个字符串,但是里面那个123.4想变成一个变量怎么弄?
★坚鸿-深圳:
字符串“123.4”转换成unsigned int变量1234,这是最常用的算法,不要用任何库涵数,要自己动脑写转换算法,否则一辈子都不提高。分析步骤如下:
(1)字符串“123.4”先过滤小数点变成字符串“1234”
(2)任何数字字符减去字符“0”就等于它的变量本身。比如字符“5”减去“0”就等于变量5。
我写的转换算法参考代码如下:
- #include "REG52.H"
-
- //const unsigned char *pu8StringBuffer 代表被转换的字符串数组
- //unsigned char u8StringSize 代表数组的有效位数
- //unsigned long *pu32ResultData 代表转换后的结果数据。必须加&符号带入此函数形参,表示传址。
- //unsigned char *pu8ResultDotSize 代表转后结果数据的小数点数。必须加&符号带入此函数形参,表示传址。
- void string_to_data(const unsigned char *pu8StringBuffer,unsigned char u8StringSize,unsigned long *pu32ResultData,unsigned char *pu8ResultDotSize);
- unsigned char aaaa1[]="123.4";
- unsigned long Gu32Data; //转换后的变量数值结果
- unsigned char Gu8Dot; //转换后的变量所带的小数点个数
- void main() //主程序
- {
- //注意,Gu32Data和Gu8Dot要加&符号代表传地址给指针
- string_to_data(aaaa1,5,&Gu32Data,&Gu8Dot);
- while(1);
- }
- //const unsigned char *pu8StringBuffer 代表被转换的字符串数组
- //unsigned char u8StringSize 代表数组的有效位数
- //unsigned long *pu32ResultData 代表转换后的结果数据。必须加&符号带入此函数形参,表示传址。
- //unsigned char *pu8ResultDotSize 代表转后结果数据的小数点数。必须加&符号带入此函数形参,表示传址。
- void string_to_data(const unsigned char *pu8StringBuffer,unsigned char u8StringSize,unsigned long *pu32ResultData,unsigned char *pu8ResultDotSize)
- {
- unsigned char i;
- unsigned char k;
- unsigned char u8DotSize;
- unsigned char u8DotFlag;
- unsigned long u32Data;
- unsigned long u32Temp;
- unsigned long u32TenTimes;
- unsigned char u8DataBuffer[15]; //数组缓存
-
- k=0;
- u8DotSize=0; //记录小数点数
- u8DotFlag=0; //有小数点的标志
- for(i=0;i<u8StringSize;i++)
- {
- if(pu8StringBuffer[i]>='0'&&pu8StringBuffer[i]<='9') //只收留数字,过滤其它干扰字符
- {
- u8DataBuffer[k]=pu8StringBuffer[i]; //去掉干扰字符,左对齐
- k++; //k也是当前的有效数据
- if(1==u8DotFlag) //表示当前的是小数点后面的数据
- {
- u8DotSize++; //统计小数点后的位数
- }
- }
- else if('.'==pu8StringBuffer[i]) //如果是小数点
- {
- u8DotFlag=1; //标志位置1,代表后面的数据都是小数点数据了
- }
-
- }
- u32Data=0; //转换的变量结果
- u32Temp=0; //临时中间变量
- u32TenTimes=1; //不断以10倍放大,代表后面个十百千万的位数
- for(i=0;i<k;i++) //此时k是有效数据的个数
- {
- //减去'0'是字符转换成变量,同时让一个char的数据放到一个long类型的临时变量u32Temp里,避免乘法溢出
- u32Temp=u8DataBuffer[k-1-i]-'0';
- u32Data=u32Data+u32Temp*u32TenTimes;
- u32TenTimes=u32TenTimes*10; //以10倍不断放大的系数,代表后面个十百千万的位数
- }
- *pu32ResultData=u32Data; //把数据的转换结果输出
- *pu8ResultDotSize=u8DotSize; //把小数点个数的转换结果输出
- }
复制代码
|
|