2023年8月3日发(作者:)

C++和C#之间Socket通信中⽂乱码解决办法:在C++发送前把多字节编码转成Unicode编码,C#在接收时,⽤Unicode编码。

部分代码如下,C++

这⾥sendto的第三个参数,是需要两倍的size,因为多字节⽤8bit来表⽰字符,Unicode⽤16bit来表⽰字符。 char buffer[1024]="0"; strcpy(buffer, pDlg->m_strSendText); int nSize = pDlg->m_gth(); WCHAR bufU[1024] = L"0"; int bufUSize = MultiByteToWideChar(CP_ACP, 0, buffer, -1, bufU, 1024);

size_t tempsize = wcslen(bufU); if (sendto( pDlg->m_sockClt, (char *)bufU, bufUSize*2, 0, (struct sockaddr*)&server, len) != SOCKET_ERROR) { ...... }C#部分代码 private void ReceiveData() { client = new UdpClient(port); while (true) { try { IPEndPoint anyIP = new IPEndPoint(, 0); byte[] data = e(ref anyIP); string text = ing(data); } catch (Exception err) { or(err); } } }

2023年8月3日发(作者:)

C++和C#之间Socket通信中⽂乱码解决办法:在C++发送前把多字节编码转成Unicode编码,C#在接收时,⽤Unicode编码。

部分代码如下,C++

这⾥sendto的第三个参数,是需要两倍的size,因为多字节⽤8bit来表⽰字符,Unicode⽤16bit来表⽰字符。 char buffer[1024]="0"; strcpy(buffer, pDlg->m_strSendText); int nSize = pDlg->m_gth(); WCHAR bufU[1024] = L"0"; int bufUSize = MultiByteToWideChar(CP_ACP, 0, buffer, -1, bufU, 1024);

size_t tempsize = wcslen(bufU); if (sendto( pDlg->m_sockClt, (char *)bufU, bufUSize*2, 0, (struct sockaddr*)&server, len) != SOCKET_ERROR) { ...... }C#部分代码 private void ReceiveData() { client = new UdpClient(port); while (true) { try { IPEndPoint anyIP = new IPEndPoint(, 0); byte[] data = e(ref anyIP); string text = ing(data); } catch (Exception err) { or(err); } } }