这对你们中的一些人来说可能很简单。
我正在查看以下串行读取函数,但我不太理解 &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];
}
最佳答案
这个片段实现了一个大小为 3 的移位寄存器。
最旧的值在 prefix[0]
中,最新的在 prefix[2]
中。这就是 prefix[2]
的地址被传递给函数 read()
的原因。
循环离开,当前两个字节已经是FA FB
时,当前(最后接收到的)字节在prefix[2]
中。如果无法读取任何内容(read
的返回值不同于 1),则该函数会保留在该点之前。
当您无法预测是否在同步字符 FA FB
前面接收到其他字节时,使用此移位寄存器。每次读取操作读取三个字节将不允许同步数据流中的某处。
关于c++ - 关于C++的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5910196/