用VC做的一个win32程序,用unicode字符的.
用recv()函数接收数据的时候,该函数的参数只能用char类型的,所以要进行转换.char chaRec[50];
recv(sockAcc,chaRec,50,0);
MessageBox(NULL,chaRec,_T("INFO"),MB_OK);wchar_t chaRec[50];
recv(sockAcc,(char*)chaRec,50,0);
MessageBox(NULL,chaRec,_T("INFO"),MB_OK);这两个强制转换,显示的都是乱码.试过multibyteTowidechar()函数也只能传送英文,中文还是乱码.请问怎么解决?
请不要贴ctrl+c的废话,也不要告诉我用_T()宏,关键在这两种数据类型,一个8位,一个16位.
用recv()函数接收数据的时候,该函数的参数只能用char类型的,所以要进行转换.char chaRec[50];
recv(sockAcc,chaRec,50,0);
MessageBox(NULL,chaRec,_T("INFO"),MB_OK);wchar_t chaRec[50];
recv(sockAcc,(char*)chaRec,50,0);
MessageBox(NULL,chaRec,_T("INFO"),MB_OK);这两个强制转换,显示的都是乱码.试过multibyteTowidechar()函数也只能传送英文,中文还是乱码.请问怎么解决?
请不要贴ctrl+c的废话,也不要告诉我用_T()宏,关键在这两种数据类型,一个8位,一个16位.
char chaRec[100];
memset(chaRec, 0, sizeof(chaRec));或者memset(chaRec, '\0', sizeof(chaRec));
如果两端编码不同,强制转换就会出现乱码。
楼主的程序估计发送方使用了char,而接收方使用的wchar_t。
这种情况可以使用ATL中的CA2CT类或A2T宏来转换。
CA2CT类在UNICODE下被转换为CA2W,实现char到wchar_t的转换;
在非UNICODE下直接原样返回。CA2CT类为ATL7.0新增类,A2T宏为旧版ATL3.0宏,功能一样,建议使用新类。用法:#include<AtlBase.h>
#include<AtlConv.h>// ......
CA2T lpszBuffer((LPCSTR)chaRec); // lpszBuffer指向转换好的buffer,可以直接当LPCTSTR指针使用
如果用宏:#include<AtlBase.h>
#include<AtlConv.h>// ......
USES_CONVERSION; // 必须先使用此宏
LPTSTR lpszBuffer = A2T((LPSTR)chaRec);
TCHAR sztRec[50] = {0};
char szRec[100] = {0};
int nRet = recv(socket, szRec, 100, 0);
memcpy(sztRec, szRec, nRet*sizeof(TCHAR));