Проблема с sscanf () не читает каждый 0, который находится в массиве char - PullRequest
1 голос
/ 02 апреля 2020

Мне нужно извлечь числа из моего массива char, он хранит значение в формате чч: мм (пример 20:20). Я попытался с помощью функции sscanf извлечь чч в переменную часа и переменную мм в минуту. Он работает хорошо до тех пор, пока время не станет примерно таким, как 0number: 0number или если оно будет 00:00. Оно возвращает только число без 0 или только один 0. Возможно ли, что при чтении первого 0 оно воспринимается как нечто иначе, не часть значения массива? Спасибо за любой ответ.

char time[15]; ///where I store the time value 
Serial.println(time); //prints nicely something like 02:02
int hour;
int minute;

sscanf(incas,"%02d:%02d",&hour,&minute); 
Serial.println(hour);  ///prints 2
Serial.println(minute); ///prints 2

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Проблема не в ie с вашим звонком на sscanf, а с звонком на println. Попробуйте это:

char time[15]; ///where I store the time value 
Serial.println(time); //prints nicely something like 02:02
int hour;
int minute;

sscanf(incas,"%02d:%02d",&hour,&minute); 
char strBuf[3];
sprintf(strBuf, "%02d", hour);//hour is an int, so you need to pad with leading 0's
Serial.println(strBuf);  ///prints 2
sprintf(strBuf, "%02d", minute);
Serial.println(strBuf); ///prints 2
0 голосов
/ 02 апреля 2020

An int понятия не имеет о ведущих нулях. 0000000000000123 == 123. Если вам нужны ведущие нули, вам придется отформатировать его самостоятельно.

Пример преобразования hour и minute обратно в массив char:

char out[15];
sprintf(out, "%02d:%02d", hour, minute);
Serial.println(out);
...