2010-08-24 90 views
2

我有一個寬字符的XML消息,需要通過C++的Win32套接字發送。用send(sock,wszBuffer,...)發送TCHAR緩衝區?

TCHAR wszBuffer[1024]; 

我應該sprintf(szSendBuffer, "%S", wszBuffer)寬字符緩衝器到char陣列發送前?

發送此消息的正確方法是什麼?

+0

C++有套接字? – dreamlax 2010-08-26 05:54:39

+0

@dreamlax:C++中的Win32套接字。修正了問題。 – 2010-08-26 12:11:55

回答

2

將wszBuffer直接傳遞給套接字函數,將其轉換爲char *,其中length = sizeof(wszBuffer)或1024 * sizeof(TCHAR)。在這種情況下,緩衝區將按原樣發送。

如果要將此文本作爲ANSI字符串發送,請將其轉換爲任何字符串轉換函數。 sprintf是好的,另一種方式是W2A。但是一些信息可能會丟失。

+0

我不控制接收端,這是一個Java TCP服務器。如果我簡單地施放它,這不會影響他們的流讀取的字符並解析爲XML嗎? – 2010-08-24 11:03:49

+1

如果接收器期望ANSI字符串,則需要將其轉換爲ANSI。如果接收者期望Unicode字符串,只需將它作爲字節流發送。當然,兩端必須是一樣的。 – 2010-08-24 12:33:34

0

您可以簡單地將它轉換爲char *。另一方面,您可以簡單地將接收到的緩衝區轉換爲wchar_t *。

+0

'sizeof'總是以字節爲單位,而不是元素的數量,所以你顯示的表達式是錯誤的。 – 2010-08-26 06:13:01

+0

你是對的 - 改變我的回答 – 2010-08-26 09:16:37

1

由於您正在處理XML,因此您需要先使用UTF-8或其他XML友好字符編碼(並在XML序言中指定該編碼),然後再通過套接字發送它。

1

使用WideCharToMultiByte將其轉換爲UTF-8(或任何其他基於char的編碼,只要您在XML文件中聲明它)。

相關問題