UP 添加字符串转浮点

main
JiXieShi 2024-06-02 12:57:33 +08:00
parent 1f0ba41616
commit e6d089e400
5 changed files with 62 additions and 8 deletions

View File

@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.27)
project(HW_Lib CXX C)
set(CMAKE_C_STANDARD 23)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") #c++
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++23") #c++
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99") #c
include_directories(
lib/inc

View File

@ -47,6 +47,7 @@ typedef enum { // 定义枚举类型Type_t包含不同数据类型
float *:6,double *:10, \
default: ((void)0))
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0])) // 计算数组的元素个数
#define in , // 定义逗号为in
#define _foreach(e, a) for(size_t e = 0; e < ARRAY_SIZE(a); e++) // 实现foreach宏遍历数组ae为当前元素下标
@ -82,7 +83,7 @@ typedef enum { // 定义枚举类型Type_t包含不同数据类型
* @param I_Max: []
* @param O_Min: []
* @param O_Max: []
* @retval
* @return
* @example Mapping(128,0,4096,0.0,3.3) //0.10
* ADC
**/
@ -111,6 +112,14 @@ float Mapping(float val, float I_Min, float I_Max, float O_Min, float O_Max);
**/
void BufPrint(char *name, void *buf, Type_t type, unsigned int len, unsigned char frame);
/**
* @brief
* @param str: []
* @return float
* @example Str2Float("3.14");
**/
float Str2Float(char *str);
/**
* @brief
* @param arr: []

View File

@ -43,3 +43,31 @@ void BufPrint(char *name, void *buf, Type_t type, unsigned int len, unsigned cha
}
printf("\n");
}
float Str2Float(char *str) {
int integer = 0;
double decimal = 0;
int sign = 1;
int decimalFlag = 0;
int decimalWeight = 1;
if (*str == '-') {
sign = -1;
str++;
}
while (*str != '\0') {
if (*str == '.') {
decimalFlag = 1;
str++;
continue;
}
if (!decimalFlag) {
integer = integer * 10 + (*str - '0');
} else {
decimal = decimal * 10 + (*str - '0');
decimalWeight *= 10;
}
str++;
}
decimal /= decimalWeight;
return float(sign * (integer + decimal));
}

25
main.c
View File

@ -5,6 +5,7 @@
#include "t_iic.h"
#include "t_task.h"
#include "t_arg.h"
#include "tool.h"
#include <time.h>
void Test(char *name, void (*pFunction)()) {
@ -24,11 +25,27 @@ void Test(char *name, void (*pFunction)()) {
printf("\n------< %s END >------\n", name);
}
#define END "\n"
#define TYPE_F(v) _Generic((v), \
char :"[char]-> "#v"=%c" END, \
short :"[short]-> "#v"=%d" END, \
int :"[int]-> "#v"=%d" END, \
float :"[float]-> "#v"=%.2f" END , \
double :"[double]-> "#v"=%.2f" END, \
default: "[err]-> "#v"=%p" END)
#define POUT(s) printf(TYPE_F(s) ,s)
int main() {
srand((unsigned) time(NULL));
Test("SPI", Test_spi);
Test("IIC", Test_iic);
Test("ArgPase", Test_argpase);
Test("Task", Test_task);
int i = 1;
POUT((++i) + (++i));
char str[] = "123.456";
float result = Str2Float(str);
printf("Result: %.3f\n", result);
// Test("SPI", Test_spi);
// Test("IIC", Test_iic);
// Test("ArgPase", Test_argpase);
// Test("Task", Test_task);
return 0;
}