C++ Cstring 转 const * char (Unicode 及非Unicode)

申明:本文非笔者原创,原文转载自:http://blog.csdn.net/qqim123/article/details/52367179



Unicode 编码的:

最简单的办法

#include<AtlBase.h>

CString m_toSend = "中文";

USES_CONVERSION;

char *psz = T2A(m_toSend);

复杂点的办法:

扫描二维码关注公众号,回复: 5423018 查看本文章

//   Setlocale,本函数用来配置地域的信息,设置当前程序使用的本地化信息。配置地域化信息函数 #include <locale.h>

const wchar_t* wstr = (LPCTSTR)m_toSend;     //一定得是unicode,否则这句话会错的
size_t strsize = (m_toSend.GetLength() + 1) * 2; // 宽字符的长度;
char * pstr = new char[strsize];
memset(pstr, 0, strsize);

size_t n=0;

setlocale(LC_ALL, "zh-CN");//调用wcstombs之前先调setlocale(LC_ALL, "zh-CN");否则wcstombs不会处理超过255的字符
int a =wcstombs_s(&n, pstr, strsize, wstr,_TRUNCATE );  //如果有中文最后一个参数不能用wcslen(wstr)来当最大字节数,会漏数据,用默认的_TRUNCATE 就可以

待研究的:

//WideCharToMultiByte()


非Unicode 编码

1 string to CString   

  CString.format("%s",string.c_str()); 

2 CString to string

string str(CString.GetBuffer(str.GetLength()));

3 string to char *

char *p=string.c_str();

4 char * to string

string str(char*);

5 CString to char *

strcpy(char,CString,sizeof(char));

6 char * to CString

CString.format("%s",char*);

 CString的format方法是非常好用的。string的c_str()也是非常常用的,但要注意和char *转换时,要把char定义成为const char*,这样是最安全的。 以上函数UNICODE编码也没问题: unicode下照用,加个_T()宏就行了,像这样子_T("%s")


猜你喜欢

转载自blog.csdn.net/carson2005/article/details/73835757
今日推荐