使用 send(sock, wszBuffer, ...) 发送 TCHAR 缓冲区?
我有一条宽字符 XML 消息,需要通过 C++ 中的 Win32 套接字发送。
TCHAR wszBuffer[1024];
我应该在发送之前将宽字符缓冲区 sprintf(szSendBuffer, "%S", wszBuffer)
转换为 char
数组吗?
发送这个的正确方法是什么?
I have a wide-character XML message that I need to send over a Win32 socket in C++.
TCHAR wszBuffer[1024];
Should I sprintf(szSendBuffer, "%S", wszBuffer)
the wide character buffer to a char
array before sending it?
What is the correct way to send this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
将 wszBuffer 直接传递给套接字函数,将其转换为 char*,长度 = sizeof(wszBuffer) 或 1024 * sizeof(TCHAR)。在这种情况下,缓冲区将按原样发送。
如果您想将此文本作为 ANSI 字符串发送,请使用任何字符串转换函数将其转换。 sprintf可以,另一种方式是W2A。但有些信息可能会丢失。
Pass wszBuffer directly to the socket function, casting it to char*, with length = sizeof(wszBuffer), or 1024 * sizeof(TCHAR). In this case the buffer will be send as is.
If you want to send this text as ANSI string, convert it by any string convertion function. sprintf is OK, another way is W2A. But some information may be lost.
由于您正在处理 XML,因此需要在通过套接字发送之前将其编码为 UTF-8 或其他 XML 友好的字符编码(并在 XML 的序言中指定该编码)。
Since you are dealing with XML, you need to encode it in UTF-8 or other XML-friendly character encoding (and specify that encoding in the XML's prolog) before sending it over the socket.
使用
WideCharToMultiByte
将其转换为 UTF-8(或任何其他基于char
的编码,只要您在 XML 文件中声明它)。Use
WideCharToMultiByte
to convert it to UTF-8 (or any otherchar
-based encoding, as long as you declare it in the XML file).您只需将其转换为 char* 即可。在另一端,您可以简单地将接收到的缓冲区转换为 wchar_t*。
You can simply cast it to a char*. On the other end you can simply cast the recieved buffer to wchar_t*.