我有一个跟踪身体运动的应用程序,它也可以像服务器一样通过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)被发送到客户端。
在我的客户端,我得到了stringstream。我也将它转换回mtbf。问题是,代码不是来自我,所以我不理解这一切。当姿势转换为mtbf时会发生以下情况:
data.addFlag(0);
data << torso.x() << torso.y() << torso.z();
sensorConfig |= MTBFData_0_4::RightArmPosition;
data.addFlag(1);
.
.
.
我知道它正在添加一个“旗帜”,以便我可以识别躯干,例如躯干的x y和z坐标。但是add flag方法如下所示:
addFlag(unsigned char n)
{
m_flag |= (1i64 << n);
m_buf.replace(7+8, 8, reinterpret_cast<char*>(&m_flag), 8);
return *this;
}
这种方法究竟是什么?转移一些东西并重新解释char ...我真的需要帮助才能理解这一点! 谢谢!
答案 0 :(得分:0)
如果没有看到更多代码,很难说肯定...
m_flag |= (1i64 << n);
... m_flag可能是无符号的64位int,这是将m_flag的n th 位与1进行或运算。
m_buf.replace(7+8, 8, reinterpret_cast<char*>(&m_flag), 8);
...现在标志已被修改,它用新的标志值替换缓冲区中的当前标志值。
答案 1 :(得分:0)
addFlag旨在累积m_flag成员中的标志(某种64位整数)。每次调用都会使用最新的m_flag值更新m_buf中固定的8字节字段。
m_flag能够累积多个标志,每个标志都添加了对addFlag的单独调用。
请记住,m_flags中的标志会累积,持续存在,直到某个其他成员函数清除它为止。
每个标志值与64位整数值中的单个位相关联。这种程序通常在某处定义一个可能的标志值列表,或者使用一堆#define行或者作为枚举。查找0到63之间的值。