#include <stdio.h>
/**
*******************************************************************************
* @brief 字符串转数字 函数
* @param [in] *str 字符串指针
* @param [in] len 从*str里面要转换的字符个数
* @return 转换数值
* @note
*******************************************************************************
*/
double StringToNumber(char* str, char len)
{
char* p = str;
char maskNegative = 0; //负数标记
char mulIntegral = 10; //整数倍数
double mulDecimal = 1; //小数倍数
double result = 0;
while(len--) //限定转换长度,若以特殊结束符 结束,此长度大于结束符便宜长度即可
{
if(*p == '-'){p++; len--; maskNegative = 1;} //是负数
if(*p == '.'){p++; len--; mulIntegral = 1;} //遇到小数点了
if( (*p<'0') || ('9'<*p) ){break;} //有非法字符 或 结束符号 ','、 '*'
if(mulIntegral == 1)mulDecimal *= 0.1; //小数倍数改变
result = (result * mulIntegral) + ((*p-'0') * mulDecimal); //字符转数值
p++;
}
if(maskNegative) result = -result; //处理负数
return result;
}
/**
*******************************************************************************
* @brief 主 函数
* @param [in] None
* @return None
* @note
*******************************************************************************
*/
int main(void)
{
char a[] = "-2239.37849";
printf("数值1:%d \n", (char)StringToNumber(a, 2) );
printf("数值2:%f \n", StringToNumber(&a[4], 3) );
printf("数值3:%f \n", StringToNumber(a, 30) );
}
运行结果: