2012-01-02 109 views
0

我正在開發C#服務器和C++客戶機。 C++客戶端向服務器發送一些unicode字符串。還行吧。我有一個字符串對象,並使用data()函數來獲取字節數組,並通過套接字將其發送到C#服務器。這沒關係。服務器正確接收消息。問題在於接收。我收到來自c#服務器的字節,但我想要一種方法來將字節「轉換」爲相應的unicode字符串。C++將UTF字節數組轉換爲字符串

我試圖創建一個寬字符串對象:

wstring str = wstring((wchar_t *) buff); 

並經由c_str()函數提取字符串但是結果字符串不是服務器發送字符串!!

其中,buff是一個從套接字接收的字節數組(unsigned char數組)。

任何幫助將不勝感激!

+2

什麼編碼的Unicode?有幾個。 – Oded 2012-01-02 20:35:42

+0

C++客戶端是否發送與C#服務器所期望的相同種類的unicode編碼? – 2012-01-02 20:38:11

+0

是的都是UTF-16 – user969245 2012-01-02 20:43:17

回答

3

這是我怎麼會去試圖解決這個問題:

  1. 開始與服務器。檢查要發送的數據。這是你期望的嗎?
  2. 現在連接。運行Wireshark並檢查通過以太網發送的實際數據。這是你期望的嗎?
  3. 在客戶端,檢查緩衝區。這是你期望的嗎?
  4. 在客戶端,檢查wstring。這是你期望的嗎?

從一個已知的實體(從服務器發送數據)開始,並檢查它的每一步,看看它停止在哪裏,你期望它是什麼。這會告訴你你的錯誤在哪裏。一旦你知道這一點,如果你仍然有問題,發佈錯誤的地點的詳細信息。

+0

我可以確認發送的字節是正確的。問題在於第四步。 wstring ... – user969245 2012-01-02 21:34:25

+0

換句話說,我想要做的是實現相應的UTF8.GetString()c#.net函數 – user969245 2012-01-02 22:42:12

+0

我很困惑。你在上面說過,兩者都是UTF-16。如果是這種情況,則不需要UTF8.GetString()。你應該能夠投射UTF-16數據陣列並且很好。如果您實際上以UTF8格式傳輸數據,那麼您需要進行轉換。可以看到這個問題:http://stackoverflow.com/questions/148403/utf8-to-from-wide-char-conversion-in-stl – 2012-01-03 16:42:54

相關問題