windows socket中send函数只能发送char *,但我的工程编码是unicode?

send(
    _In_ SOCKET s,
    _In_reads_bytes_(len) const char FAR * buf,
    _In_ int len,
    _In_ int flags
);

发现转化成多字节发送,服务端那边就乱码了。。。

阅读 7.6k
3 个回答

为什么要转码?char *你可以理解为void *,强转一下就行了,接收端接收后强转回去不就得了。对于 socket 而言,就只是字节流而已,没有什么 Unicode 之分。

服务器方是否按照多字节解码?如果想要正确的通信结果,请确保客户端服务区端用同一套字符编码解码方案

已解决,可以用以下方法:

CHAR* EncodingTool::UnicodeToUTF8(const WCHAR* wideStr)
{
    char* utf8Str = NULL;
    int charLen = -1;
    charLen = WideCharToMultiByte(CP_UTF8, 0, wideStr, -1, NULL, 0, NULL, NULL);
    utf8Str = (char*)malloc(charLen);
    WideCharToMultiByte(CP_UTF8, 0, wideStr, -1, utf8Str, charLen, NULL, NULL);
    return utf8Str;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏