2013-03-15 84 views
0

我有一個跟蹤身體運動的應用程序,它也可以像服務器一樣通過TCP發送身體跟蹤數據。 我的客戶端連接到服務器並獲取數據。需要幫助閱讀/解析TCP網絡代碼C++

數據被髮送到客戶端這樣的事情之前發生:

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

其中姿勢有等爲載體,腿,肩位置的頭部位置的所有信息etc..SS是新的stringstream,並且使用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座標。但添加標記方法如下所示:

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

這個方法究竟是什麼?轉移一些東西,並重新解釋字符......我真的需要幫助來理解這一點! 謝謝!

+0

二進制操作和算術在這裏播放。你有「二進制或」** single **'|'並且用'<< ** ** n次** **左移位。不確定,但'1i64'可能是1 64位整數,即。 '0000000000000000000000000000000000000000000000000000000000000001',不知道我是否在這裏。 – Rolice 2013-03-15 11:00:14

回答

0

很難肯定地說沒有看到更多的代碼,但...

m_flag |= (1i64 << n); ... M_FLAG可能是一個無符號的64位int和這與1

或運算第n個 的M_FLAG

m_buf.replace(7+8, 8, reinterpret_cast<char*>(&m_flag), 8); ...現在標誌已被修改,它用新的標誌值替換緩衝區中的當前標誌值。

0

addFlag旨在在m_flag成員(某種64位整數)中累加標誌。每次調用都會使用最新的m_flag值更新m_buf中的固定8字節字段。

m_flag能夠累積多個標誌,每個標誌都添加了對addFlag的單獨調用。

請記住,m_flags中的標誌會累加,直到其他成員函數清除它爲止。

每個標誌值都與64位整數值中的一個位相關聯。這種程序通常在某個地方定義一個可能的標誌值列表,或者用一堆#define行或者作爲枚舉。查找0到63之間的值。