C语言如何将字符串处理成数字?
单片机与嵌入式 2024-06-07
编程时,经常用到进制转换、字符转换。比如软件界面输入的数字字符串,如何将字符串处理成数字呢?今天就和大家分享一下。

1 字符串转十六进制

代码实现:

2 十六进制转字符串 

代码实现:

或者:

效果:十六进制:0x13 0xAA 0x02转为字符串:”13AAA2”

3 字符串转十进制

代码实现:
第一种,如果带负号 这个就是atoi函数的实现:

效果:字符串:”-123” 转为 -123 第二种,如果不带负号

效果:字符串:”123” 转为 123

第三种:包含转为浮点数

//m^n函数//返回值:m^n次方.u32 NMEA_Pow(u8 m,u8 n){ u32 result=1;  while(n--)result*=m;  return result;}//str转换为数字,以','或者'*'结束//buf:数字存储区//dx:小数点位数,返回给调用函数//返回值:转换后的数值int NMEA_Str2num(u8 *buf,u8*dx){ u8 *p=buf; u32 ires=0,fres=0; u8 ilen=0,flen=0,i; u8 mask=0; int res; while(1) //得到整数和小数的长度 { if(*p=='-'){mask|=0X02;p++;}//是负数 if(*p==','||(*p=='*'))break;//遇到结束了 if(*p=='.'){mask|=0X01;p++;}//遇到小数点了 else if(*p>'9'||(*p<'0')) //有非法字符 {  ilen=0; flen=0; break; }  if(mask&0X01)flen++; else ilen++; p++; } if(mask&0X02)buf++; //去掉负号 for(i=0;i//得到整数部分数据 {  ires+=NMEA_Pow(10,ilen-1-i)*(buf[i]-'0'); } if(flen>5)flen=5; //最多取5位小数 *dx=flen; //小数点位数 for(i=0;i//得到小数部分数据 {  fres+=NMEA_Pow(10,flen-1-i)*(buf[ilen+1+i]-'0'); }  res=ires*NMEA_Pow(10,flen)+fres; if(mask&0X02)res=-res;  return res;}
效果:字符串:”123.456” 先转为 123456,然后除以1000得到123.456

4 十进制转字符串

代码实现:
如果只是单个十进制转字符串,使用sprintf函数就可以了。 如果是十进制数组:

效果:十进制数组13 14转为字符串“1314”

5 u8、u32转换

 效果:整型 50 转字符数组 {‘\0’,’\0’,’\0’,’2’} 
u8数组转u32:
void U8ArrayToU32(uint8_t *buf, uint32_t *u32Value){ *u32Value = (buf[0] <<24) + (buf[1] <<16) + (buf[2] <<8) + (buf[3] <<0);}
效果:字符数组 {‘\0’,’\0’,’\0’,’2’}转为整型 50

6 大小端(高低位)转换

STM32 默认是小端模式的,那么该如何转为大端?

 效果:len为数据类型为 u16(short),比如 0x11 0x22,转为u8(usigned char)数组。 
大端为:

小端为:


声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 【立即预约】Keysight直播:搞懂介电常数那些事儿


  • 相关技术文库
  • C语言
  • 编程
  • 软件开发
  • 程序
下载排行榜
更多
评测报告
更多
EE直播间
更多
广告