3
我有一個3字節的數組,通過串口緩存傳入字節。一旦它滿了,我想用字節來調用一個函數,它需要一個字節和一個int作爲參數。這在理論上應該不成問題,但由於某些原因,字節不能正確轉換爲int。這裏是我的代碼:在Arduino上將字節轉換爲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;
這是一個類型轉換的問題?我在這裏錯過了什麼嗎?
'說法| = buffer [2];'你可能想在這裏使用buffer [0]? – wildplasser
除了沒有用3個解碼字節進行真正的呼叫,直到第4個字節可用,並且在收到第3個字節之後沒有立即進行,這是有道理的,我看不到任何明顯的奇怪。 –
感謝Joachim,我會重新排列這個功能。緩衝區指數是正確的。 –