簡體   English   中英

關於C ++的問題

[英]Question about C++

對於某些人來說,這可能是一個非常簡單的過程。

我在看下面的串行讀取功能,我不太理解&prefix[2]在這里的功能。 這是否意味着只能填充兩個字節或其他內容?

我還應該提到,這是播放器/舞台平台的一部分。

while (1)
{
  cnt = 0;
  while (cnt != 1)
  {
    if ((cnt += read(fd, &prefix[2], 1)) < 0)
    {
      perror("Error reading packet header from robot connection: P2OSPacket():Receive():read():");
      return (1);
    }
  }

  if (prefix[0] == 0xFA && prefix[1] == 0xFB)
  {
    break;
  }

  GlobalTime->GetTimeDouble(&timestamp);

  prefix[0] = prefix[1];
  prefix[1] = prefix[2];

}

調用read(fd, &prefix[2], 1)僅表示“將單個字節存儲在prefix[2] ”。

通常, &a[n](&a) + n是相同的地址

該片段實現了大小為3的移位寄存器。

最早的值在prefix[0] ,最新的在prefix[2] 這就是將prefix[2]的地址傳遞給函數read()

當前兩個字節為FA FB ,將離開循環,當前(最后接收到的)字節位於prefix[2] 該功能在該點之前離開,如果沒有什么可以讀取(的返回值read從1不同)。

當您無法預測是否在同步字符 FA FB接收到其他字節時,將使用此移位寄存器。 每次讀取操作讀取三個字節將不允許同步數據流中的某個位置。

它正在讀取一個名為prefix的數組,該數組的起始位置是從數組開頭起兩個位置的偏移量。 在這種情況下,僅讀取單個字符,但可以讀取更多字符。

看起來這段代碼正在讀取串行通信流,等待標有FAFB的標頭的開始。 while循環將字符單獨讀取到prefix[2]並在數組中向后隨機排列它們。

我認為使用&prefix[2]是一個技巧,當while循環通過break退出時,可以使標頭中的下一個字符出現在prefix數組中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM