我有一個寬字符的XML消息,需要通過C++的Win32套接字發送。用send(sock,wszBuffer,...)發送TCHAR緩衝區?
TCHAR wszBuffer[1024];
我應該sprintf(szSendBuffer, "%S", wszBuffer)
寬字符緩衝器到char
陣列發送前?
發送此消息的正確方法是什麼?
我有一個寬字符的XML消息,需要通過C++的Win32套接字發送。用send(sock,wszBuffer,...)發送TCHAR緩衝區?
TCHAR wszBuffer[1024];
我應該sprintf(szSendBuffer, "%S", wszBuffer)
寬字符緩衝器到char
陣列發送前?
發送此消息的正確方法是什麼?
將wszBuffer直接傳遞給套接字函數,將其轉換爲char *,其中length = sizeof(wszBuffer)或1024 * sizeof(TCHAR)。在這種情況下,緩衝區將按原樣發送。
如果要將此文本作爲ANSI字符串發送,請將其轉換爲任何字符串轉換函數。 sprintf是好的,另一種方式是W2A。但是一些信息可能會丟失。
我不控制接收端,這是一個Java TCP服務器。如果我簡單地施放它,這不會影響他們的流讀取的字符並解析爲XML嗎? – 2010-08-24 11:03:49
如果接收器期望ANSI字符串,則需要將其轉換爲ANSI。如果接收者期望Unicode字符串,只需將它作爲字節流發送。當然,兩端必須是一樣的。 – 2010-08-24 12:33:34
您可以簡單地將它轉換爲char *。另一方面,您可以簡單地將接收到的緩衝區轉換爲wchar_t *。
'sizeof'總是以字節爲單位,而不是元素的數量,所以你顯示的表達式是錯誤的。 – 2010-08-26 06:13:01
你是對的 - 改變我的回答 – 2010-08-26 09:16:37
由於您正在處理XML,因此您需要先使用UTF-8或其他XML友好字符編碼(並在XML序言中指定該編碼),然後再通過套接字發送它。
使用WideCharToMultiByte
將其轉換爲UTF-8(或任何其他基於char
的編碼,只要您在XML文件中聲明它)。
C++有套接字? – dreamlax 2010-08-26 05:54:39
@dreamlax:C++中的Win32套接字。修正了問題。 – 2010-08-26 12:11:55