Я программирую 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
).
Как я могу это сделать?
Простой метод грубой силы, это написать процедуру как:
void p(char X) {
if (X < 16) {Serial.print("0");}
Serial.println(X, HEX);
}
И в основном коде:
p(byte1); // etc.
извините — недостаточно репутации, чтобы комментировать, но найденный предыдущий ответ не полностью корректен. На самом деле, хороший легкий способ кодирования это должен быть:
пустота р (байт ИКС) {
если (Х < 10) {Serial.print («0»);}
…
давая код:
void p(byte X) {
if (X < 10) {Serial.print("0");}
Serial.println(X, HEX);
}
И в основном коде:
p(byte1); // etc.
надеюсь это поможет
Используйте 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
Попробуй это:
//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));