У меня есть эта строка во встроенной системе C ++ GNU ARM:
char* TempStr = "pressure 0.85";
Мне нужно, чтобы числовое значение хранилось как отдельная переменная с плавающей точкой, называемая presmax
До сих пор анализируемое число всегда было целым числом, поэтому я мог без проблем использовать sscanf. Однако, как я много читал в Интернете (и из первых рук), sscanf обычно не работает с плавающими объектами во встроенных системах (без какой-либо обширной конфигурации / потери места на флэш-памяти).
Мне интересно, есть ли у кого-нибудь предложения. Возможно, я мог бы разобрать "0.85" как массив символов? Я не совсем уверен, как это сделать, хотя это позволило бы мне использовать atof (), чтобы превратить его в float, как я делал в других местах программы.
Я понимаю, что другой вариант - написать функцию, однако я довольно программист-любитель, поэтому, если есть более надежное и эффективное по времени решение, я бы лучше его взял.
UPDATE:
В случае, если это помогает, TempStr - это строка, скопированная из файла .txt на SD-карту с использованием FatFs. Вот полный код, который читает две строки и каждый раз сохраняет результаты в TempStr. Я анализирую строку в соответствующей переменной каждый раз, когда сохраняется TempStr:
FILINFO fno;
FIL fsrc;
int FileEnd = 0;
int CurrentLine = 0;
int pressmax = 0;
int timemax = 0;
char* TempStr;
WCHAR CharBuffer[100];
res = f_stat("config.txt", &fno); //check for config.txt file
res = f_open(&fsrc, "config.txt", FA_READ | FA_OPEN_ALWAYS); //open config.txt file
//first line
TempStr = f_gets((char*)CharBuffer, sizeof(fsrc), &fsrc);
CurrentLine ++;
FileEnd = FileEnd + strlen(TempStr) + 1;
//sscanf(TempStr, "%*s %i", &presmax); //what I did when presmax was an int
//second line
while ((f_eof(&fsrc) == 0)){
TempStr = f_gets((char*)CharBuffer, sizeof(fsrc), &fsrc);
CurrentLine ++;
FileEnd = FileEnd + strlen(TempStr) + 1;
}
//sscanf(TempStr, "%*s %i", &timemax);
Использование инструментов сборки GNU ARM на STM32L с Eclipse.