头文件:
#include <stdlib.h>
1.strtof()函数返回值是一个单精度浮点数,它的参数有两个。第一个参数指向要解释的以空字符结尾的字节字符串。第二个参数指向数字后的第一个字符。
用法举例:以串口传参为例
/**********************************
*函数:USART1_Check(char *cmd)
*输入参数:命令字符串
*返回值:无
**********************************/
//假如串口接收到了一个字符串"PID 0.1 0.2 0.3"
void USART1_Check(char *cmd)
{
//字符串比较函数比较"PID "和cmd也就是字符串"PID 0.1 0.2 0.3"前4位字符,相同则返回0
if(strncasecmp("PID ",cmd,4)==0)
{
char *str;
str=cmd+4; //字符串"PID 0.1 0.2 0.3"第4位字符地址
char *s = str; //等价于char *s="0.1 0.2 0.3";
char *p = NULL;
float KP = strtof(s,&p); //将字符串"0.1"转换成float型0.100000
s=p+1; //p保存的是0.1后的空字符地址,p+1就等于字符串0.2的地址
float KI = strtof(s,&p); //将字符串"0.2"转换成float型0.200000
s=p+1;
float KD = strtof(s,&p); //将字符串"0.3"转换成float型0.300000
Contrl_PID.Kp=KP;
Contrl_PID.Ki=KI;
Contrl_PID.Kd=KD;
}
}
2.strtol()函数
函数原型:long int strtol(const char *str , char **endstr , int base);
str为要转换的字符串,endstr 为第一个不能转换的字符的指针,base为字符串str所采用的进制。
用法:将一个字符串str 在基于base进制的情况下进行分割,遇到第一个不合法的字符就需要停止向后遍历,如果合法就向后遍历,取出合法部分的值给与返回值即可。(此时合法的值和base有关,base为n,这个数就是n进制的值,所以我们在获取值之后如果要用到10进制的值,就需要做个进制转换)。
不合法部分给endstr,也可以不用给,这个时候只需将endstr传NULL即可,base的范围是2-36。
举例说明:如果base = 2 合法部分只能是0和1,
如果base = 8合法部分只能是0-7,如果base = 10合法部分只能是0-9,
如果base = 16合法部分只能是0-F(大小写都可以)
如果base = 36合法部分只能是0-10,a-z(A-Z)。
举例:
int main()
{
const char* a= "100!";
int b= strtol(a, NULL, 10);//将字符串"100"转换为10进制100
printf("%d\n", b); //打印b的值等于100
return 0;
}