7

我正在对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

换句话说,我想打印“完整”的十六进制值,包括0s (05而不是000而不是0)。

我怎样才能做到这一点?

4

6 回答 6

7

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

void p(char X) {

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

   Serial.println(X, HEX);

}

在主代码中:

p(byte1);  // etc.
于 2013-10-02T02:06:24.623 回答
2

使用 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

于 2016-08-19T13:33:56.923 回答
2

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

无效 p(字节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.

希望这可以帮助

于 2015-08-18T21:27:39.740 回答
2

内存、代码和运行时占用最低的将是经典位播放

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

在任何 8 位类型上都可以正常工作。对于任何其他掩码也是第一行

Serial.print((b>>4)&0x0F,  HEX);
于 2020-06-19T08:30:19.863 回答
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));
于 2013-10-02T03:20:17.650 回答
0

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

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

所有 Serial.print() 例如。println、printf、sprint、print 将以 ASCII 格式“打印”您的值。

于 2020-10-20T14:30:40.853 回答