Форматирование строки
- Войдите на сайт для отправки комментариев
Пт, 06/01/2017 - 13:38
Уважаемые , подскажите пожалуйста. Имеется переменная типа int в которую попадает диапазон значений от 0 до 999. Необходимо выплюнуть в порт значение состоящее из 3х цифр. Например, если переменная приняла значение 1, то в порт необходимо выплюнуть 001, если 0, то 000, если 99, то 099. Первое,что пришло на ум ,такой код, но ведь можно как то изящнее?
int s; String u; if (s<1.0) u = "000"; if (9>=s>=1) u ="00"+String(s); if (99>=s>9) u ="0"+String(s); Serial.println(u);
Можно так:
String.Substring()
Этот вариант должен меньше кушать памяти . Он предпочтительней.
Спасибо уважаемые,заюзаю
Целый sprintf ради такого воробья? Да, Вы что, парни, Вы знаете сколько он "весит"? И всё это ради того, чтобы одну цифирьку выровнять?
Ваш вариант?
Ваш вариант?
Да, 100500 вариантов может быть. Если число от 0 до 999, то зачем тащить универсальные функции?
Ну, не знаю, ну, хоть так:
void setup() { Serial.begin(115200); char * TextBuffer = "000"; int MyInt = 97; TextBuffer[0] = '0' + MyInt / 100; TextBuffer[1] = '0' + (MyInt % 100) / 10; TextBuffer[2] = '0' + MyInt % 10; Serial.println(TextBuffer); } void loop() {} //Sketch uses 1 864 bytes (6%) of program storage space. Maximum is 30 720 bytes. //Global variables use 212 bytes (10%) of dynamic memory, leaving 1 836 bytes for local variables. Maximum is 2 048 bytes.А теперь сравните
void setup() { Serial.begin(115200); char TextBuffer[4]; int MyInt = 97; sprintf(TextBuffer, "%03d", MyInt); Serial.println(TextBuffer); } void loop() {} //Sketch uses 3 364 bytes (10%) of program storage space. Maximum is 30 720 bytes. //Global variables use 212 bytes (10%) of dynamic memory, leaving 1 836 bytes for local variables. Maximum is 2 048 bytes.Как видите разница в 1500 байтов! А для данного скетча, так это почти в два раза!