STM32开发

您所在的位置:网站首页 stm32数字变成字符 STM32开发

STM32开发

2024-07-11 16:01| 来源: 网络整理| 查看: 265

上一篇文章最后留下一个任务,字符串函数和进制间转换、进制和字符串间转换。 这些是会经常用到的。但是有时一时会想不起来。 这里做一下总结,方便以后需要查找。

先贴出一些,之前讲过的知识点。

一、复习知识点 1、字符串函数

参看:C语言再学习 – 字符串和字符串函数

2、位操作

参看:C语言再学习 – 位操作

3、ASCII码表

参看:C语言再学习 – ASCII码表(转)

4、占位符

参看:C语言再学习 – printf、scanf占位符

5、常用函数

参看:C语言再学习 – 常用头文件和函数(转)

二、转换

二进制(B,Binary),八进制(O,Octal) 十进制(D,Decimalist),十六进制(H,Hex)

1、字符串转十六进制 代码实现: void StrToHex(char *pbDest, char *pbSrc, int nLen) { char h1,h2; char s1,s2; int i; for (i=0; i 9) s1 -= 7; s2 = toupper(h2) - 0x30; if (s2 > 9) s2 -= 7; pbDest[i] = s1*16 + s2; } }

效果: 字符串:”13AAA2” 转为 0x13 0xAA 0x02

2、十六进制转字符串 代码实现: void HexToStr(char *pszDest, char *pbSrc, int nLen) { char ddl, ddh; for (int i = 0; i < nLen; i++) { ddh = 48 + pbSrc[i] / 16; ddl = 48 + pbSrc[i] % 16; if (ddh > 57) ddh = ddh + 7; if (ddl > 57) ddl = ddl + 7; pszDest[i * 2] = ddh; pszDest[i * 2 + 1] = ddl; } pszDest[nLen * 2] = '\0';

或者

u16 Hex2StringArray (u8 *pSrc, u16 SrcLen, u8 *pObj) { u16 i=0; for(i=0; i= '9' || *str 10) *pbDest = 0; tmp = 1; *pbDest = 0; for (i=nLen-1; i>=0; i--) { *pbDest += tmp*(*(pbSrc+i)-'0'); tmp = tmp*10; } }

效果: 字符串:”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> 16) & 0xFF); buf[2] = ((u32Value >> 8) & 0xFF); buf[3] = (u32Value & 0xFF); }

效果: 整型 50 转字符数组 {‘\0’,’\0’,’\0’,’2’}

u8数组转u32 void U8ArrayToU32(uint8_t *buf, uint32_t *u32Value) { *u32Value = (buf[0] 8)&0xFF; printf ("0x%02X\n", str[0]); str[0] = (i&0xFF00)>>8; printf ("0x%02X\n", str[0]); return 0; } 输出结果: 0x11 0x11 0x11


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3