首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 串口接收字節數據循環賦值給固定變量 A~E

     編輯:程式設計綜合問答

需求

串口每次接收 5 字節,需循環賦值:第 1 次→A, 第 2 次→B … 第 5 次→E,第 6 次→A …

簡潔實現:環形索引


byte[] buffer = new byte[5]; // A~E
int index = 0;

void OnDataReceived(byte[] data)
{
    // 假設每次恰好收到 1 字節,若收多字節需循環處理
    buffer[index] = data[0];
    index = (index + 1) % 5; // 0→1→2→3→4→0...
}

完整串口事件示例


private byte[] _latestBytes = new byte[5];
private int _pos = 0;

private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    int len = serialPort1.BytesToRead;
    byte[] recv = new byte[len];
    serialPort1.Read(recv, 0, len);

    foreach (byte b in recv)
    {
        _latestBytes[_pos] = b;
        _pos = (_pos + 1) % 5;
    }
    // 此處可觸發 UI 更新事件
}

進階:直接處理而非存變量

若後續邏輯只是判斷值,無需存入 A~E 變量,直接用索引訪問:


// 判斷第 3 個字節是否為 0xAA
if (_latestBytes[2] == 0xAA) { ... }

注意事項

  • 串口讀取可能一次返回多字節,foreach 循環處理每個字節。
  • 多線程訪問 _latestBytes 需加鎖或用 ConcurrentQueue。
  • 若協議有幀頭/幀尾,建議先組幀再解析,而非單字節輪詢。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved