CString转字符串,cstring转char-函数 多字节

  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,则此函数不可用。

CString转字符串,cstring转char-函数 多字节