我有一个 3 字节数组,通过串行端口缓冲传入的字节。一旦它已满,我想使用字节来调用一个以字节和 int 作为参数的函数。理论上这应该不是问题,但由于某种原因,字节没有被正确地转换为 int。这是我的代码:
// for serialEvent()
uint8_t buffer[3] = {0, 0, 0};
uint8_t index = 0;
void serialEvent() {
while (Serial.available()) {
if (index > 2) {
// buffer is full so process it
uint16_t argument = (uint16_t)buffer[1];
argument <<= 8;
argument |= buffer[2];
processSerial(buffer[0], argument);
index = 0;
}
buffer[index] = Serial.read();
index++;
}
}
void processSerial(uint8_t action, uint16_t argument) { ... }
问题似乎出在第一位向左移动以为第二位腾出空间的行中。我已经尝试再次通过串行端口输出变量,并且在位移操作之后,它是 0。
当我尝试用乘以 256(理论上具有相同的结果)替换位移操作时,也会发生同样的事情。
令人恼火的是,当我像这样分配一个静态值时,一切正常:
uint16_t argument = 0x00CD;
argument <<= 8;
这是类型转换问题吗?我在这里错过了什么吗?