1 字符串转十六进制
代码实现:
2 十六进制转字符串
代码实现:
3 字符串转十进制
代码实现:第一种,如果带负号 这个就是atoi函数的实现:
第三种:包含转为浮点数
//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效果:字符串:”123.456” 先转为 123456,然后除以1000得到123.456//得到整数部分数据 { 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;}
4 十进制转字符串
代码实现:如果只是单个十进制转字符串,使用sprintf函数就可以了。 如果是十进制数组:
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)数组。大端为: