关于C ++的问题

时间:2011-05-06 10:41:32

标签: c++ arrays serial-communication

对于你们中的一些人来说,这可能是非常简单的。

我正在查看以下串行读取功能,我无法理解&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];

}

4 个答案:

答案 0 :(得分:3)

电话read(fd, &prefix[2], 1)只是表示“在prefix[2]中存储一个字节。”

通常,&a[n](&a) + n

的地址相同

答案 1 :(得分:3)

该片段实现了大小为3的移位寄存器。

最旧的值位于prefix[0],最新值位于prefix[2]。这就是为什么prefix[2]的地址被传递给函数read()

保留循环,当前两个字节为FA FB时,当前(最后接收的)字节位于prefix[2]。如果无法读取任何内容(read的返回值与1不同),则该函数将保留在该点之前。

如果无法预测同步字符 FA FB前面是否收到其他字节,则使用此移位寄存器。每次读取操作读取三个字节都不允许在数据流中的某处同步。

答案 2 :(得分:2)

它正在读入一个名为prefix的数组,从数组开头的两个偏移处开始。在这种情况下,只读取一个字符,但可以读取更多字符。

答案 3 :(得分:1)

看起来这段代码正在读取一个串行通信流,等待标题为FAFB的标题的开头。 while循环将字符单独读入prefix[2]并将其向后移动到数组中。

我认为使用&prefix[2]是一种技巧,当prefix循环退出{{1}时,会使标题中的下一个字符出现在while数组中}。