Форматирование строки

Darkblue
Offline
Зарегистрирован: 06.01.2017

Уважаемые , подскажите пожалуйста. Имеется переменная типа 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);

 

Nosferatu
Offline
Зарегистрирован: 04.11.2012

Можно так:

int s;
String u = "000" + String(s);
Serial.println(u.substring(u.length() - 3,u.length()));

String.Substring()

MikSer
Offline
Зарегистрирован: 27.01.2012
char TextBuffer[4];
int MyInt;

sprintf(TextBuffer, "%03d", MyInt);

Serial.println(TextBuffer);

 

Nosferatu
Offline
Зарегистрирован: 04.11.2012

MikSer пишет:

char TextBuffer[4];
int MyInt;

sprintf(TextBuffer, "%03d", MyInt);

Serial.println(TextBuffer);

 

Этот вариант должен меньше кушать памяти . Он предпочтительней.

Darkblue
Offline
Зарегистрирован: 06.01.2017

Спасибо уважаемые,заюзаю 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Целый sprintf ради такого воробья? Да, Вы что, парни, Вы знаете сколько он "весит"? И всё это ради того, чтобы одну цифирьку выровнять?

Darkblue
Offline
Зарегистрирован: 06.01.2017

Ваш вариант?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Darkblue пишет:

Ваш вариант?

Да, 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 байтов! А для данного скетча, так это почти в два раза!