Как `Serial.print ()` & quot; полный & quot; шестнадцатеричные байты?

Я программирую Arduino и я пытаюсь Serial.print() байты в шестнадцатеричном формате «мой путь» (продолжайте читать для получения дополнительной информации).

То есть с помощью следующего кода

byte byte1 = 0xA2;
byte byte2 = 0x05;
byte byte3 = 0x00;

Serial.println(byte1, HEX);
Serial.println(byte2, HEX);
Serial.println(byte3, HEX);

Я получаю следующий вывод в Serial Monitor:

A2
5
0

Однако я хотел бы вывести следующее:

A2
05
00

На словах я хотел бы напечатать «полное» шестнадцатеричное значение, включая 0с (05 вместо 0 а также 00 вместо 0).

Как я могу это сделать?

5

Решение

Простой метод грубой силы, это написать процедуру как:

void p(char X) {

if (X < 16) {Serial.print("0");}

Serial.println(X, HEX);

}

И в основном коде:

p(byte1);  // etc.
5

Другие решения

извините — недостаточно репутации, чтобы комментировать, но найденный предыдущий ответ не полностью корректен. На самом деле, хороший легкий способ кодирования это должен быть:

пустота р (байт ИКС) {
если (Х < 10) {Serial.print («0»);}

давая код:

void p(byte X) {

if (X < 10) {Serial.print("0");}

Serial.println(X, HEX);

}

И в основном коде:

p(byte1);  // etc.

надеюсь это поможет

1

Используйте sprintf для печати в буфер (два символа на байт + нулевой терминатор):

byte byte1 = 0xA2;
byte byte2 = 0x05;
byte byte3 = 0x00;
char s[7];
sprintf(s, "%02x\n%02x\n%02x", byte1, byte2, byte3);
Serial.println(s);

Добавлены новые строки между ними, чтобы получить каждую новую строку. Что касается «% 02x», то% означает, что здесь идет информация о форматировании, 0 означает заполнение с 0, 2 означает ввод с клавиатуры до ширины 2 символа, а x означает, что это будет шестнадцатеричное значение.

Для других вариантов форматирования см. http://linux.die.net/man/3/sprintf

1

Попробуй это:

//Converts the upper nibble of a binary value to a hexadecimal ASCII byte.
//For example, btohexa_high(0xAE) will return 'A'.
unsigned char btohexa_high(unsigned char b)
{
b >>= 4;
return (b>0x9u) ? b+'A'-10:b+'0';
}//Converts the lower nibble of a binary value to a hexadecimal ASCII byte.
//  For example, btohexa_low(0xAE) will return 'E'.unsigned char btohexa_low(unsigned char b)
{
b &= 0x0F;
return (b>9u) ? b+'A'-10:b+'0';
}

И в основном коде:

comand_mod=0xA1; //example variable
Serial.print(btohexa_high(comand_mod));
Serial.print(btohexa_low(comand_mod));
0
По вопросам рекламы [email protected]