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

原创 2016年08月30日 10:38:43

Unicode 编码的:

最简单的办法

#include<AtlBase.h>

CString m_toSend = "中文";

USES_CONVERSION;

char *psz = T2A(m_toSend);

复杂点的办法:

//   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")

版权声明:本文为博主原创文章,未经博主允许不得转载。

CString与const char*的相互转换

前篇: ①CString强制类型转换为const char*,在变量前加上:(char *)(LPCTSTR),这样做虽不会报错,但其转换后的值可能是乱码,不推荐这样做! ②利用中间变量(string...
  • shuaiqidiudiu
  • shuaiqidiudiu
  • 2013年05月13日 10:40
  • 4584

Unicode编码下CString、char*、BSTR相互转换,char*、wchar_t*相互转换

更多精彩内容,请见:http://www.16boke.com 1、Unicode编码下CString转为char* 方法一:使用API:WideCharToMultiByte进行转换 #inclu...
  • one_in_one
  • one_in_one
  • 2014年05月20日 10:30
  • 5599

CString与char*互转、ANSI 和 UNICODE 编码及_T和L宏定义的介绍

1、简述之前在写MFC程序的时候经常会用到CString 字符串类型,自从转到Qt就转为用QString了,自然QString比CString好用多了。最近需要将CString 与 char* 进行互...
  • GoForwardToStep
  • GoForwardToStep
  • 2016年11月08日 19:32
  • 2005

【该方法本人实践成功(推荐)】Cstring 和 const char* , unicode和ANSI编码 的一个具体应用

参考文章如下: l 网上流传甚广的一个大牛写的“关于CString的技巧”,没能找到原文,转载地址如下:http://blog.csdn.net/coolstar14/archive/2004/07...
  • kent19900125
  • kent19900125
  • 2013年03月22日 10:08
  • 683

C++类型转换(char* string cstring unicode ansi )转换

  • 2015年04月01日 18:52
  • 24KB
  • 下载

UNICODE下宽字符的CString转换为const char *和char到WCHAR的相互转换

一、 使用函数_tcscpy_s: CString theString( "This is a test" ); int    sizeOfString = (theString.GetLe...
  • mail_cm
  • mail_cm
  • 2012年04月01日 09:55
  • 480

VC++的多字符集和unicode字符集转换大全(CString转char*等)

CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换 _T的意思是通知编译器,自行进行字符串的多字节/Unicode转换。 而L表示,该字符串为Unicode...
  • q357010621
  • q357010621
  • 2016年04月26日 23:58
  • 979

【转】宽字节与单字节的转换 Unicode字符集下CString与char *转换

今天编写了一个MFC下的socket编程,这个宽字节和单字节可把我害惨了,所以这里特别转载一篇关于宽字节与单字节转换的博客。我稍微把格式改的好看一点。在Visual C++.NET2005中,默认的字...
  • maoliran
  • maoliran
  • 2016年07月24日 22:14
  • 250

Unicode下CString(wchar_t)转换为 char* (转)

平台VC2005,使用Unicode字符集。因为以前一直是用多字节字符集的,使用的str开头的函数都要转换成_wcs,烦,最后,被CString类型无法转换为char*或char[]的错误搞得是火大了...
  • wljun739
  • wljun739
  • 2011年07月29日 18:53
  • 1024

UniCode 下 CString 转 char* 的方法

今天进行文件操作时,将CString的GetBuffer()后直接倒到char数组后写入文件发现 每个字符与字符之间都有一个空格存在,而且有内容丢失。原来CString类对象GetBuffer(),后...
  • superbfly
  • superbfly
  • 2014年01月13日 10:45
  • 846
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ Cstring 转 const * char (Unicode 及非Unicode)
举报原因:
原因补充:

(最多只允许输入30个字)