0

我有一个跟踪身体运动的应用程序,它也可以像服务器一样通过 TCP 发送身体跟踪数据。我的客户端连接到服务器并获取数据。

在将数据发送到客户端之前,会发生以下情况:

MTBF v10 = bodyPose2MTBF_v10(pose, m_startup, m_stream_position, 1);
ss << v10.get();
m_body_tracking_server->send(ss);

其中姿势包含所有信息,例如作为矢量的头部位置、腿、肩位置等。SS 是一个新的字符串流,并且使用 v10.get() 流以字符串形式填充姿势。在 send 方法中,stringstream(ss) 被发送到客户端。

在我的客户中,我得到了字符串流。我还将它转换回 mtbf。问题是,代码不是我的,所以我不明白。当姿势转换为 mtbf 时,会发生以下情况:

data.addFlag(0);
data << torso.x() << torso.y() << torso.z();
sensorConfig |= MTBFData_0_4::RightArmPosition;
data.addFlag(1);
.
.
.

我知道它正在添加一个“标志”,以便我可以识别例如躯干,然后是躯干的 xy 和 z 坐标。但添加标志方法如下所示:

addFlag(unsigned char n)
{
m_flag |= (1i64 << n);
m_buf.replace(7+8, 8, reinterpret_cast<char*>(&m_flag), 8);
return *this;
}

这个方法具体是做什么的??转移一些东西并重新解释字符......我真的需要帮助来理解这一点!谢谢你!

4

2 回答 2

0

addFlag 旨在在 m_flag 成员(某种 64 位整数)中累积标志。每次调用都会使用最新的 m_flag 值更新 m_buf 中的一个固定的 8 字节字段。

m_flag 能够累积多个标志,每个标志都通过对 addFlag 的单独调用添加。

请记住,m_flags 中的标志会累积,一直持续到其他成员函数清除它为止。

每个标志值都与 64 位整数值中的单个位相关联。这种程序通常在某处定义一个可能的标志值列表,或者使用一堆#define 行或作为枚举。查找 0 到 63 之间的值。

于 2013-03-15T12:35:30.683 回答
0

如果没有看到更多代码,很难确定,但是......

m_flag |= (1i64 << n);... m_flag 可能是一个无符号的 64 位 int,这是将 m_flag 的第 n与 1 进行或运算。

m_buf.replace(7+8, 8, reinterpret_cast<char*>(&m_flag), 8);...现在标志已被修改,它将缓冲区中的当前标志值替换为新的标志值。

于 2013-03-15T12:13:34.890 回答