0

体の動きを追跡するアプリケーションがあります。サーバーのように機能して、体の追跡データを TCP 経由で送信することもできます。私のクライアントはサーバーに接続し、データを取得します。

データがクライアントに送信される前に、次のようなことが起こります。

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

ポーズには、ベクトルとしての頭の位置、脚、肩の位置などのすべての情報が含まれています。send メソッドでは、stringstream(ss) がクライアントに送信されます。

私のクライアントでは、stringstream を取得します。また、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

より多くのコードを見ずに確実に言うのは難しいですが...

m_flag |= (1i64 << n);... m_flagはおそらく符号なし64ビットintであり、これはm_flagのn番目のビットと1のORをとっています。

m_buf.replace(7+8, 8, reinterpret_cast<char*>(&m_flag), 8);...フラグが変更されたので、バッファ内の現在のフラグ値が新しいフラグ値に置き換えられます。

于 2013-03-15T12:13:34.890 に答える
0

addFlag is designed to accumulate flags in the m_flag member (some kind of 64 bit integer). Each call updates a fixed, 8-byte field within m_buf with the latest m_flag value.

m_flag is able to accumulate several flags, each added with separate calls to addFlag.

Keep in mind that the flags in m_flags will accumulate, persisting until some other member function clears it.

Each flag value is associated with a single bit within a 64-bit integer value. This kind of program usually defines a list of possible flag values somewhere, either with a bunch of #define lines or as enums. Look for values between 0 and 63.

于 2013-03-15T12:35:30.683 に答える