如何`Serial.print()`“完整”十六进制字节?

时间:2013-10-01 23:59:03

标签: c++ hex arduino byte println

我正在编程Arduino,我正在以“我的方式”尝试十六进制格式的Serial.print()字节(继续阅读以获取更多信息)。

即,使用以下代码

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

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

我在串行监视器中得到以下输出:

A2
5
0

但是我想输出以下内容:

A2
05
00

简而言之,我想打印“完整”的十六进制值,包括0 s(05而不是000而不是0 )。

我该怎么做?

6 个答案:

答案 0 :(得分:6)

简单的强力方法,就是写一个例程:

void p(char X) {

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

   Serial.println(X, HEX);

}

在主要代码中:

p(byte1);  // etc.

答案 1 :(得分:1)

抱歉 - 没有足够的声誉发表评论,但发现以前的答案并不完全正确。实际上,编写代码的好方法应该是:

void p( byte X){    if(X <1 0 ){Serial.print(“0”);}    ...

给出代码:

void p(byte X) {

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

   Serial.println(X, HEX);

}

在主要代码中:

p(byte1);  // etc.

希望这会有所帮助

答案 2 :(得分: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

答案 3 :(得分:1)

“内存”,“代码”和“运行时”的最小占用空间是经典播放方式

byte b;
Serial.print(b>>4,  HEX);
Serial.print(b&0x0F,HEX);

在任何8bit类型上都能正常工作。对于其他任何遮罩,第一行也要

Serial.print((b>>4)&0x0F,  HEX);

答案 4 :(得分:0)

试试这个:

//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));

答案 5 :(得分:0)

哇! 7年前,我在这里感到,我的答案可能对您(希望不再有用)或其他正在寻找像我这样的答案的人有用。

使用“ Serial.write()”通过串行发送一个十六进制字节。

所有Seri​​al.print()例如println,printf,sprint,print将以ASCII“打印”您的值。