CString转字符串,cstring转char*函数 多字节
在windows平台上做即时通讯小程序时,需要从编辑框中获取输入字符串,用socket函数发送给另一端。该属性是UNICODE。
从编辑框中得到的字符串是CString,而socket函数需要一个char字符串。我发现转换有点麻烦,但是CString本身没有提供这个功能。
纠缠后总结的解决方案如下:
非UNICODE项目:
1.获取CString存储字符串的内存地址,并进行转换或直接复制。
示例:
CStringstrTemp
charszTemp[128];
strTemp=_ T( abcdkfei );
memset(szTemp,0,sizeof(SZ temp));
strcpy(szTemp,strTemp。get buffer(0));
2.使用(LPSTR)进行强制转换(LPCSTR)
示例:
char * buf
CStringstr= hello
buf=(LPSTR)(LPCTSTR)str;
以上两种方法的原理都是基于CString类保存char字符串。通过获取内部字符串头的地址,可以将数据复制出来或直接强制。
UNICODE工程
如果UNICODE engineering具有上述方法,它将报告一个错误。WCAHR不能直接转换成char,可以在上面的基础上用WideCharToMultiByte函数转换。
示例:
CString发送字符串;
m_sendEdit。GetWindowText(sendString);
m_sendEdit。SetWindowText(L );
char buf[1024]={ 0 };
WideCharToMultiByte(CP_ACP,0,sendString。GetBuffer(0),sendString。GetLength(),buf,1024,0,0);
send(clientSocket,buf,strlen(buf),0);
3.只需使用CString类的成员函数:OemToANSI()。我没有验证这个方法。查MSDN的解释:
CString:OemToAnsi
Visual Studio 6.0此主题尚未分级-
CString:OemToAnsi
void OemToAnsi();
评论
将此CString对象中的所有字符从OEM字符集转换为ANSI字符集。请参见《C语言参考》中的http://technet.microsoft.com/zh-cn/library/ms857349.aspx。
如果定义了_UNICODE,则此函数不可用。