Добрый день! Получаю с сервера точное время и записываю его в модуль часов реального времени. Заметил странную ошибку: "8"-ки и "9"-ки превращаются в "0". Вот кусок кода отвечающий за обработку ответа сервера (для примера обновляю каждую сек., а так раз в сутки): Код (C++): int dayTime, monthTime, yearTime, hourTime, minuteTime, secondTime, weekTime; char timeServer[ansver.length()+1]; ansver.toCharArray(timeServer, ansver.length()+1); sscanf (timeServer, "%i:%i:%i:%i:%i:%i:%i", &dayTime, &monthTime, &yearTime, &hourTime, &minuteTime, &secondTime, &weekTime); if (weekTime == 0) weekTime = 7; rtc.setDate(dayTime, monthTime, yearTime); rtc.setTime(hourTime, minuteTime, secondTime); rtc.setDOW(weekTime); Serial.print(String(ansver)+"\t"+String(dayTime)+"."+String(monthTime)+"."+String(yearTime)+" "+String(hourTime)+":"+String(minuteTime)+":"+String(secondTime)+", "+String(weekTime)); А вот то, что я вижу в сериалпорт: Код (C++): 02:03:2017:16:23:59:4 2.3.2017 16:23:59, 4 02:03:2017:16:24:00:4 2.3.2017 16:24:0, 4 02:03:2017:16:24:01:4 2.3.2017 16:24:1, 4 02:03:2017:16:24:02:4 2.3.2017 16:24:2, 4 02:03:2017:16:24:03:4 2.3.2017 16:24:3, 4 02:03:2017:16:24:05:4 2.3.2017 16:24:5, 4 02:03:2017:16:24:06:4 2.3.2017 16:24:6, 4 02:03:2017:16:24:07:4 2.3.2017 16:24:7, 4 02:03:2017:16:24:08:4 2.3.2017 16:24:0, 4 02:03:2017:16:24:09:4 2.3.2017 16:24:0, 4 02:03:2017:16:24:10:4 2.3.2017 16:24:10, 4 02:03:2017:16:24:11:4 2.3.2017 16:24:11, 4 Как видно вместо 8-ки и 9-ки в секундах нули, тоже самое и на минутах происходит. В чем может быть косяк?
Формат '%i' говорит о том, что ожидается число. При чём, в отличии от формата '%d', число может быть в разных системах счисления -- 16-тиричные числа должны начинаться с '0x', восьмиричные с '0' (ноль), остальные считаются десятичными. Числа 00, 01, 02, ... 07 -- это восьмиричные числа. Числа 08 и 09 рассматриваются как восмиричные, т.к. начинаются с '0', но как не корректные, поэтому сканер преобразует их в 0.