簡體   English   中英

使用stringstream,我如何解析這些字符串?

[英]working with a stringstream, how do i unparse these strings?

我有一個tcp客戶端,它從服務器獲取數據作為字符串流。 服務器將向量(浮點數)打包在一個大字符串中,並用標志分隔它們。 現在在我的客戶端,我再次分離這些標志,並將它們存儲在一個字符串數組中。 所以每個“Token”應該是一個向量。 但我只是無法解析它。 字符串我看起來很奇怪,看看: 在此輸入圖像描述

所以,我需要做的就是將其解析為3個浮點數。 在服務器端,它發送如下:

data.addFlag(11);
data << pelvis.x() << pelvis.y() << pelvis.z();
data.addFlag(12);
data << rhip.x() << rhip.y() << rhip.z();

運營商過載的地方

operator<<(const float& f)
{
m_buf.append(reinterpret_cast<const char*>(&f), sizeof(f));
return *this;
}

編輯:

一個令牌看起來像這樣:如果我嘗試通過解析它

float first = *reinterpret_cast<float*>(value)

我得到一個例外。 在此輸入圖像描述

好吧,字符串看起來很好,你只需要明白,當你將浮點數重新解釋為字符數組時,你將無法獲得人類可讀的東西。 您可以在這里查看浮點數如何表示為二進制: 浮點教程

因此,如果您有浮點數1.01,您將獲得二進制00111111100000010100011110101110,這是十六進制0x3f8147ae,如果您在ascii表中查看每個字節,您將看到這些字節可能看起來像垃圾。

所以對你的問題:如果你看這里你將看到每個浮點數是4個字節。

所以假設你有一個12字節的字符串(你應該),你應該意識到那里有3個浮點數。 要將它們取出,一次獲取4個字節並重新解釋它們

(未經測試的代碼)

string data = (however you got the data)
float first = *reinterpret_cast<float*>(&data[0]);
float second = *reinterpret_cast<float*>(&data[4]);
float third = *reinterpret_cast<float*>(&data[8]);

而已。

編輯:似乎我忘記了取消引用指針。

請看這里的工作示例:

http://ideone.com/FLce6y

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM