STM32开发 |
您所在的位置:网站首页 › stm32数字变成字符 › STM32开发 |
上一篇文章最后留下一个任务,字符串函数和进制间转换、进制和字符串间转换。 这些是会经常用到的。但是有时一时会想不起来。 这里做一下总结,方便以后需要查找。 先贴出一些,之前讲过的知识点。 一、复习知识点 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 |