Гашение незначащих нулей.

CotDaVinchi
Offline
Зарегистрирован: 12.05.2016

Вывожу на печать 8 байт идентефикатора 1-Wire. 

Serial.print(addrArray[i],HEX);  Serial.print(" "); 

Вид вывода "C 36 C2 B 0 0 0 6F". Незначащие нули гасятся. Есть ли в библиотеках фиксированный вывод данных, что бы получить следующий вид - " 0C 36 C2 B 00 00 00 6F"?

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

Ну, это в три строчки пишется безо всяких библиотек, но если Вам хочется именно с библиотекой (ну, типа, память некуда девать), можете воспользоваться функцией printf. Пример нужен или сами найдёте?

CotDaVinchi
Offline
Зарегистрирован: 12.05.2016

Ну пример не помешает, если не сложно, пока по улице променад делал, тоже сообразил, что надо С вспомнить - вывод данных с форматированием.

 

JasKo
Offline
Зарегистрирован: 21.11.2015

Добавь if (addrArray[i] < 16) Serial.print("0"); и все будет.

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

JasKo пишет:

Добавь if (addrArray[i] < 16) Serial.print("0"); и все будет.

Присоединяюсь!

Но обещанный пример с printf - мне не жалко.

ТС, вот готовый скетч, запустите и смотрите

#include <stdio.h>

//	Эти две строки пишем в начале файла
static int serial_fputchar(const char ch, FILE *stream) { Serial.print(ch); return ch; }
static FILE *serial_stream = fdevopen(serial_fputchar, NULL);

void setup(void) { 
	stdout = serial_stream; // эта строка первая в setup
	Serial.begin(115200);
	int a = 28;
	// Печатаем a в разных видах
	printf("a=%d, a=%03d, a=%04d, a=%05d, a=%06d\n", a, a, a, a, a);
	// Тоже самое в hex
	printf("a=%d, a=%03x, a=%04x, a=%05x, a=%06x\n", a, a, a, a, a);
	// Тоже самое в HEX
	printf("a=%d, a=%03X, a=%04X, a=%05X, a=%06X\n", a, a, a, a, a);
}

void loop(void){}

Можно также использовать printf_P для формата в progmem.

Есть другой способ использовать printf, менее красивый. но более экономичный. Есть также и третий - более красивый, но требующий изменений в системных файлах. Подробное обсуждение было вот здесь.

CotDaVinchi
Offline
Зарегистрирован: 12.05.2016

Спасибо! Я использовал if (addrArray[i] < 16) Serial.print("0");

И сам до этого додумал и в пример слямзил. Конечно, это проще - для данного устройства.

01 EA A4 3B 06 00 00 FA