gpt4 book ai didi

c - 在 Arduino 上将 byte 转换为 int 时数据丢失

转载 作者:行者123 更新时间:2023-12-01 08:56:11 28 4
gpt4 key购买 nike

我有一个 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;

这是类型转换问题吗?我在这里遗漏了什么吗?

最佳答案

还没有找到关于为什么会发生这种情况的解决方案,但是使用 word() 函数正是我想要的:

uint16_t argument = word(buffer[1], buffer[2]);
processSerial(buffer[0], argument);

恼人的是,它被定义为:

unsigned int makeWord(unsigned char h, unsigned char l) { return (h << 8) | l; }

关于c - 在 Arduino 上将 byte 转换为 int 时数据丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13111550/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com