VC2008在创建MFC应用程序的时候,默认字符集是unicode方式,即:
_T(),L表示unicode字符串
unicode字符串,一个字符占两个字节
例如如下代码:
CString str=_T("我们123abc是");
int len=str.GetLength(); //len=9,而不是12
char *psendbuf = NULL; //定义发送缓冲区
int len = m_send.GetLength()*2; //取得输入字符串长度m_send.GetLength()* sizeof(TCHAR) le0 = CStringA(str).GetLength();
psendbuf = new char[1024];
ZeroMemory(psendbuf, len);
psendbuf = new char[1024];
ZeroMemory(psendbuf, len);
//宽字节转byte数组
WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, (LPCWSTR)m_send, len, (LPSTR)psendbuf, len*2, NULL, NULL);
int ilen=0;
for(int i=0;i<len;i++)
{
WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, (LPCWSTR)m_send, len, (LPSTR)psendbuf, len*2, NULL, NULL);
int ilen=0;
for(int i=0;i<len;i++)
{
///0表示数组结束位,这样可以统计实际字节数,即一个汉字两个字节,一个英文字符一个字节的问题
if(psendbuf[i]==0x00)
{
ilen=i;
break;
}
}
if(psendbuf[i]==0x00)
{
ilen=i;
break;
}
}
int Ret = send(s, psendbuf, ilen, 0);
if(Ret<=0)
{
printf("Send error");
}
printf("send %d/n",Ret);
{
printf("Send error");
}
printf("send %d/n",Ret);
以上代码解决了宽字节发送的问题,因为英文字符占一个字符的。
WinCE下是用unicode方式处理的。