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

Bac*_*cko 5 c++ hex byte arduino 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);
Run Code Online (Sandbox Code Playgroud)

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

A2
5
0
Run Code Online (Sandbox Code Playgroud)

但是我想输出以下内容:

A2
05
00
Run Code Online (Sandbox Code Playgroud)

在的话,我想打印的"全"的十六进制值包括0S(05而不是000代替0).

我该怎么做?

Jac*_*man 6

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

void p(char X) {

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

   Serial.println(X, HEX);

}
Run Code Online (Sandbox Code Playgroud)

并在主要代码中:

p(byte1);  // etc.
Run Code Online (Sandbox Code Playgroud)

  • @Backo,加载模块大小.也就是说,sprintf为嵌入式系统生成了多少代码?如果你的草图太大,你将不得不放弃一些奢侈品.但是,对于一个小草图而言,任何工作显然是可以接受 (2认同)

小智 5

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

byte b;
Serial.print(b>>4,  HEX);
Serial.print(b&0x0F,HEX);
Run Code Online (Sandbox Code Playgroud)

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

Serial.print((b>>4)&0x0F,  HEX);
Run Code Online (Sandbox Code Playgroud)