写stm32代码时需要用到char数组转float类型,网上找了一遍没找到合适的,于是手写了一个。
输入的字符数组用空格分开,最后一个数据也要有空格在后面
当小数位太多时会有一点点的误差,不知道怎么来的,有懂的大佬赐教一下
void Decipher(uint8_t *data,float* result) {
//uint8_t data[250] = "-9.5 12 48.56 15 664 ";
//输入的数组用空格分开,最后一个数据最后也要有空格
float dd = 0; //计算结果
//float result[20] = { 0 };
float xiaoshudian = 0.100000000;
unsigned char flat = 1; //标记是整数还是小数
float NorP = 1; //标记是正数还是负数,1是正数,-1是负数
unsigned char i = 0, j = 0; //j是标志存入数组的位置
while (data[i] != '\n' && data[i] != '') {
if (data[i] != ' ')
{
if (data[i] == '-') {
NorP = -1;
i++;
continue;
}
if (data[i] == '.') {
flat = 0; i++;
}
if (flat == 1)dd = dd * 10 + data[i] - '0'; //是整数,按整数计算公式
else {
float k = (data[i] - '0') * xiaoshudian; //是小数,按小数计算公式
dd = (data[i] - '0') * xiaoshudian + dd;
xiaoshudian = xiaoshudian * 0.1;
}
}
else {
flat = 1;
dd = dd * NorP; //乘以负号标记位
NorP = 1;
result[j++] = dd; //存入结果数组
xiaoshudian = 0.100000000;
dd = 0;
}
i++;
}
//printf("%f", dd);
//cout << "译码结果:" << result;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)