It says here http://msdn.microsoft.com/en-us/library/ms740149%28VS.85%29.aspx发送函数需要 const char*。
如何发送宽字符?我尝试了以下方法:
void MyClass::socksend(const wchar_t* wbuffer) {
int i;
char *buffer = (char *)malloc( MB_CUR_MAX );
wctomb_s(&i,buffer, MB_CUR_MAX, (wchar_t)wbuffer);
int buflen = strlen(buffer) + 2;
char sendbuf[DEFAULT_BUFLEN];
strcpy_s(sendbuf,buflen,buffer);
sendbuf[buflen - 1] = '\n';
int senderror = send(this->m_socket, sendbuf, buflen, 0);
// error handling, etc goes here...
}
这并没有达到我的预期。它似乎没有向套接字发送任何内容。我该如何解决?
首先什么是宽字符?它是一个比8位更宽的整数值;这意味着您必须处理字节顺序。您需要将宽字符数组编码为字符数组,然后将其作为字符数组发送。在接收端,需要将字符数组解码为宽字符数组。
函数 wctomb_s 仅编码单个宽字符 to 字符数组。您要编码的函数宽字符数组 to 字符数组是 wcstombs_s。相应地,解码使用mbstowcs_s。
省略错误处理(未经测试):
void MyClass::socksend(const wchar_t* wbuffer) {
// determine the required buffer size
size_t buffer_size;
wcstombs_s(&buffer_size, NULL, 0, wbuffer, _TRUNCATE);
// do the actual conversion
char *buffer = (char*) malloc(buffer_size);
wcstombs_s(&buffer_size, buffer, buffer_size, wbuffer, _TRUNCATE);
// send the data
size_t buffer_sent = 0;
while (buffer_sent < buffer_size) {
int sent_size = send(this->m_socket, buffer+buffer_sent, buffer_size-buffer_sent, 0);
buffer_sent += sent_size;
}
// cleanup
free(buffer);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)