[英]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(×tamp);
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的數組,該數組的起始位置是從數組開頭起兩個位置的偏移量。 在這種情況下,僅讀取單個字符,但可以讀取更多字符。
看起來這段代碼正在讀取串行通信流,等待標有FA
, FB
的標頭的開始。 while
循環將字符單獨讀取到prefix[2]
並在數組中向后隨機排列它們。
我認為使用&prefix[2]
是一個技巧,當while
循環通過break
退出時,可以使標頭中的下一個字符出現在prefix
數組中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.