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
评论
  • 相关技术文库
  • C语言
  • 编程
  • 软件开发
  • 程序
  • 驱动系统的定义:解析动力传输的核心概念

    驱动程序本质上是软件代码,主要作用是计算机系统与硬件设备之间完成数据传送的功能,只有借助驱动程序,两者才能通信并完成特定的功能。如果一个硬件设备没有驱动程序,只有操作系统是不能发挥特有功能的,也就是...

    昨天
  • 驱动系统的定义及其在自动化领域的应用

    驱动程序(Device Driver)全称为“设备驱动程序”,是一种可以使计算机和设备通信的特殊程序,可以说相当于硬件的接口,操作系统只能通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能...

    昨天
  • 操作系统的安全性和功能如何提高系统性能?

    计算的操作系统对于计算机可以说是十分重要的,从使用者角度来说,操作系统可以对计算机系统的各项资源板块开展调度工作,其中包括软硬件设备、数据信息等,运用计算机操作系统可以减少人工资源分配的工作强度,使...

    昨天
  • 计算机体系结构的优化方法有哪些?

    计算机操作系统诞生初期,其体系结构就属于简单体系结构,由于当时各式各样影响因素的作用,如硬件性能、平台、软件水平等方面的限制,使得当时的计算机操作系统结构呈现出一种混乱且结构模糊的状态,其操作系统的...

    昨天
  • 线程概述如何影响程序性能?

    线程的同步是Java多线程编程的难点,往往开发者搞不清楚什么是竞争资源、什么时候需要考虑同步,怎么同步等等问题,当然,这些问题没有很明确的答案,但有些原则问题需要考虑,是否有竞争资源被同时改动的问题?对于...

    昨天
  • MCU原理及区别:实用技巧与建议

    1.对密集的乘法运算的支持GPP不是设计来做密集乘法任务的,即使是一些现代的GPP,也要求多个指令周期来做一次乘法。而DSP处理器使用专门的硬件来实现单周期乘 法。DSP处理器还增加了累加器寄存器来处理多个乘积的和...

    昨天
  • C++锁机详解:应用场景与实用代码一网打尽

    一、互斥锁(Mutex)1. std::mutex含义: std::mutex 最基本的互斥锁,当一个线程占用

    昨天
  • C++ 调用 C 的方法

    C语言代码中 extern C 的前世今生。

    06-07
  • 编程21年的经验分享

    老工程师总结的10条编程经验

    06-07
  • 什么是状态机?

    玩单片机还可以,各个外设也都会驱动,但是如果让你完整的写一套代码时,却无逻辑与框架可言。这说明编程还

    06-07
  • C语言问题的嵌入式开发指南

    单片机开发中的C语言基础知识

    06-06
下载排行榜
更多
评测报告
更多
EE直播间
更多
广告