Binary lowByte()和highByte()函数的作用是什么?

Binary lowByte()和highByte()函数的作用是什么?,binary,arduino,Binary,Arduino,我在Arduino制作了这个小实验程序,来看看函数lowByte()和highByte()是如何工作的。当传递一个值时,它们究竟应该返回什么? 在串行监视器中输入字符“9”时,它会打印以下内容: 9 0 218 255 怎么会这样?此外,最后2行将针对所有输入的值进行打印。为什么会这样 int i=12; void setup() { Serial.begin(9600); } void loop() { if(Serial.available()) { i = Serial.re

我在Arduino制作了这个小实验程序,来看看函数lowByte()highByte()是如何工作的。当传递一个值时,它们究竟应该返回什么? 在串行监视器中输入字符“9”时,它会打印以下内容:

9 
0
218
255
怎么会这样?此外,最后2行将针对所有输入的值进行打印。为什么会这样

int i=12;

void setup()
{
 Serial.begin(9600); 
}

void loop()
{
if(Serial.available())
{
 i = Serial.read() - '0';  // conversion of character to number. eg, '9' becomes 9.
 Serial.print(lowByte(i)); // send the low byte
 Serial.print(highByte(i)); // send the high byte
}

}一个
int
是Arduino上的一个16位整数。因此,您正在以字节的形式读取高位和低位部分


由于实际缓冲区是
“9\n”
,这就是为什么第二位会打印出“有趣”的数字,这是由于在Arduino上用
“0”减去结果。因此,您正在以字节的形式读取高位和低位部分


由于实际的缓冲区是
“9\n”
,这就是为什么第二位会打印出“有趣”的数字,这是由于用
'0'
序列减去结果。如果您想看到,则需要将打印格式化为字节输出

尝试:


Serial.print
需要格式化为字节输出,如果这是您想要看到的

尝试:

如果您有此数据:

10101011 11001101 // original

// HighByte() get:
10101011

// LowByte() get: 
11001101
如果您有此数据:

10101011 11001101 // original

// HighByte() get:
10101011

// LowByte() get: 
11001101

除了Rafalenfs的答案之外,您是否应该提供更大的数据类型:

00000100 10101011 11001101 // original

// HighByte() will NOT return: 00000100, but will return:
10101011

// LowByte() will still return: 
11001101

Highbyte()返回除Rafalenfs的答案之外的第二个最低位(如文档所指定:)

如果您提供了更大的数据类型:

00000100 10101011 11001101 // original

// HighByte() will NOT return: 00000100, but will return:
10101011

// LowByte() will still return: 
11001101

Highbyte()返回第二个最低位(如文档所指定的:)

但为什么我得到0?9是二进制的1001。在这种情况下,低位字节不是01001吗?低位字节是
00001001
,它们都是一样的!嘿,我只是搞糊涂了,菜鸟错了。我真的不明白一件事,为什么它打印0而不是
00001001
?它打印
9
,这是同一件事!但为什么我会得到0?9是二进制的1001。在这种情况下,低位字节不是01001吗?低位字节是
00001001
,它们都是一样的!嘿,我只是搞糊涂了,菜鸟错了。我真的不明白一件事,为什么它打印0而不是
00001001
?它打印
9
,这是同一件事!