`
yidongkaifa
  • 浏览: 4058937 次
文章分类
社区版块
存档分类
最新评论

CString、wchar和char相互转换(转载)

 
阅读更多

CString Mid( int nFirst, int nCount ) const;
nCount指明你要多少位。

CString s( "abcdef " );
for (int i=0; i < s.GetLength(); i++)
{
TCHAR c = s.GetAt(i);
//....
}

1.头文件中要定义宏;
#define UNICODE
#define _UNICODE

2.char转换成wchar
const char *pFilePathName = "c:\\aa.dll";
int nLen = strlen(pFilePathName) + 1;
int nwLen = MultiByteToWideChar(CP_ACP, 0, pFilePathName, nLen, NULL, 0);

TCHAR lpszFile[256];
MultiByteToWideChar(CP_ACP, 0, pFilePathName, nLen, lpszFile, nwLen);

3.wchar转换成char
char *pFilePathName;
TCHAR lpszFile[256];
_tcscpy(lpszFile, _T("c:\\aa.dll"));

int nLen = wcslen(wstr)+1;
WideCharToMultiByte(CP_ACP, 0, lpszFile, nLen, pFilePathName, 2*nLen, NULL, NULL);





char*和CString转换


CString 是一种很特殊的 C++ 对象,它里面包含了三个值:一个指向某个数据缓冲区的指针、一个是该缓冲中有效的字符记数(它是不可存取的,是位于 CString 地址之下的一个隐藏区域)以及一个缓冲区长度。有效字符数的大小可以是从0到该缓冲最大长度值减1之间的任何数(因为字符串结尾有一个NULL字符)。字符记数和缓冲区长度被巧妙隐藏。


(1) char*转换成CString


  若将char*转换成CString,除了直接赋值外,还可使用CString::Format进行。例如:


char chArray[] = "Char test";
TCHAR * p = _T("Char test");( 或LPTSTR p = _T("Char test");)
CString theString = chArray;
theString.Format(_T("%s"), chArray);
theString = p;


(2) CString转换成char*


  若将CString类转换成char*(LPSTR)类型,常常使用下列三种方法:


  方法一,使用强制转换。例如:


CString theString( (_T("Char test "));
LPTSTR lpsz =(LPTSTR)(LPCTSTR)theString;


  方法二,使用strcpy。例如:


CString theString( (_T("Char test "));
LPTSTR lpsz = new TCHAR[theString.GetLength()+1];
_tcscpy(lpsz, theString);


  需要说明的是,strcpy(或可移值的_tcscpy)的第二个参数是 const wchar_t* (Unicode)或const char* (ANSI),系统编译器将会自动对其进行转换。


  方法三,使用CString::GetBuffer。


如果你需要修改 CString 中的内容,它有一个特殊的方法可以使用,那就是 GetBuffer,它的作用是返回一个可写的缓冲指针。 如果你只是打算修改字符或者截短字符串,例如:
CString s(_T("Char test "));
LPTSTR p = s.GetBuffer();


LPTSTR dot = strchr(p, ''.'');


// 在这里添加使用p的代码


if(p != NULL)


*p = _T('\0');
s.ReleaseBuffer(); // 使用完后及时释放,以便能使用其它的CString成员函数


在 GetBuffer 和 ReleaseBuffer 之间这个范围,一定不能使用你要操作的这个缓冲的 CString 对象的任何方法。因为 ReleaseBuffer 被调用之前,该 CString 对象的完整性得不到保障。

分享到:
评论

相关推荐

    CString-const-char-char-to-WCHAR.rar_CString To Char_char wchar_

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

    VC之CString,wchar_t,int,string,char*之间的转换

    很好的东西,新手操作必知的数据转化方法》

    int和CString相互转化

    网上的介绍都是用atoi函数,但是CString 内部存储的是wchar_t 类型的字符,每个字符占两个字节,atoi的参数是char*,每个字符占一个字节 ,如果强制转换成char*,由于高位字节是空,所以就转成了只有第一个字符的串,这样是...

    xTool (字符间常用转换函数) 持续更新中 适用于Unicode下

    转换函数 CString char wchar_t int

    wince开发用转换类

    static CString charx2cs(char *s); cv(); virtual ~cv(); static int cstring_to_int(CString t); static CString s2cs(string text); static CString i2cs(int i); static string cs2s(CString s); static ...

    VC++对字符串处理

    cstring 转换 char cstring 转换 int cstring 转换 double 、float 等等 以及他们的互转 MultiByteToWideChar WideCharToMultiByte 的使用 简体字与繁体字互转的方法 //----------------------文档截取段落如下: ...

    中文转unicode,相互转换utf8

    中文与unicode之间的相互转换,没有用CString,Linux和Windows应该都可以使用。是网上的代码,只是搬运。但是找了很久才找到的好东西。 几个关键字:wchar_t* char* WideCharToMultiByte mbstowcs wcstombs

    各种 C++ 字符串类型转换

    各种 C++ 字符串类型转换(char *、wchar_t*、_bstr_t、CComBSTR、CString、basic_string 和 System.String) 本主题演示如何将各种 C++ 字符串类型转换为其他字符串。可以转换的字符串类型包括 char *、wchar_t*、_...

    字符串类型转换

    string,wstring,CString,TCHAR,char*之间常用转换 ,C/C++语言实现。

    C++多字节字符与宽字节字符相互转换

    觉得麻烦,于是就自己写了一个类来封装wchar_t与char类型间的转换,其他的,诸如:CString\ LPWSTR\TCHAR CHAR\LPSTR之间也是一样用 代码如下: #include &lt;iostream&gt; using namespace std; class CUser { public: ...

    CString,字符串,整数等相互转换方法(推荐)

    int atoi(const char *string); _int64 _atoi64(const char *string); int _wtoi(const wchar_t *string); _int64 _ wtoi64(const char *string); 字符串转long long atol(const char * string); long _wtol...

    C++类型转换

    C++类型转换,里边总结了C++中string,CString,char,TCHAR,wchar_t之间的转换!方法绝对简单!希望对大家有帮助!

    visual studio 2008 2010 MFC时间和线程经典例子

    其中也包括对UNICODE和CString的处理,char和wchar的转换等 文件删除了几个大的编译文件,但是不影响整个工程的直接使用,(本来有20几m,vs2010不给力啊) 温馨提醒:下载后评分(记得打星星),这样你的资源分才会归回并加1,...

    VC++知识学习

    VC++事件大全 包含了几乎所有VC++中的API事件。 VC字符串转换 包括char转wchar_t,CString 转 char* 各种方法。 VC中Windows常用控件的创建和使用,方便开发者动态创建控件,自定义控件的风格

    Unicode文件读取

    从文本文件(unicode文本)中读取字符串,并转化为CString(char) 演示mbstowcs 和 WideCharToMultiByte的使用

    C++有关数据类型转换大全

    可以转换的字符串类型包括 char *、wchar_t*、_bstr_t、CComBSTR、CString、basic_string 和 System.String。在所有情况下,在将字符串转换为新类型时,都会创建字符串的副本。对新字符串进行的任何更改都不会影响...

    《C++String深入详解2.0版》PDF

    2.1.4 以char和wchar_t特化char_traits 56 附录3:Boost.Format中文文档 57 2.1 大纲 57 2.2 它是如何工作的 57 2.3语法 58 2.3.1 boost::format( format-string ) % arg1 % arg2 % ... % argN 58 2.3.2 printf 格式...

    《深入学习c++string》2.1版

    目录 1 正文 4 一、 C++的string的使用 4 1.1 C++ string简介 4 ...2.1.4 以char和wchar_t特化char_traits 24 附录3 TCHAR.h 映射表 24 日志: 24 1.0 版 24 1.1 版 24 1.2 版 24 2.0 版 24 2.1 版 24

    新手学习C++入门资料

    数字类型和数字类型、指针和指针之间可以相互转换。当然,数字类型和指针类型也可以相互转换,但通常认为这样做是不安全而且也是没必要的。强制类型转换可以避免编译器的警告。 long int el=123; short i=(int) ...

    C和C++头文件对比一览

    #include &lt;wchar.h&gt; //宽字符处理及输入/输出 #include &lt;wctype.h&gt; //宽字符分类 ////////////////////////////////////////////////////////////////////////// 标准 C++ (同上的不再注释) #include ...

Global site tag (gtag.js) - Google Analytics