我正在编程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
而不是0
和00
而不是0
)。
我该怎么做?
答案 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()”通过串行发送一个十六进制字节。
所有Serial.print()例如println,printf,sprint,print将以ASCII“打印”您的值。