CString 与 char * 和 const char*的转换,以及在Unicode项目中的使用.
2009-01-08 15:07
423 查看
这是个老的不能再老的话题,实验一个收集一个,解决一个。
CString可以直接强转成LPCTSTR使用:
CString cstr;
TCHAR * a = (LPCTSTR)cstr;
如果需要LPTSTR,只需要继续强转:
CString cstr;
TCHAR * a = (LPTSTR)(LPCTSTR)cstr;
注意,LPCTSTR和LPTSTR都是宽字符指针。用在Unicode的工程中,上述代码正确。但是,此时a里面的内容是宽字符集,若cstr="22",则a的内容是"0x3200 0x3200",因为00会在第二个字符就遇到,所以写文件的时候如果用普通的fprintf写入第一个2就结束了,因为看到了/0结束符号。如果非Unicode则可以正确写入文件。
如果想把CString转成ASCII的char使用,则需要通过宏T2A完成,并且需要经过GetBuffer(0)作为中转。
USES_CONVERSION;
CString strTime("2008");
const char* st = T2A(strTime.GetBuffer(0));
此时st成功转成const char*类型。此时用普通的fprintf能够正确的写入文件
用fprintf写问文件时换行键用/n表示,不要/r。
而在VC的控件里面,需要/r/n一起表示才能实现换行。
一般情况下/n表示换行,表示移到下一行的同列
/r表示回车,表示放到最左边
参考http://hi.baidu.com/xhero2008/blog/item/2b67f6dc683de8a4cd1166f9.html
CString可以直接强转成LPCTSTR使用:
CString cstr;
TCHAR * a = (LPCTSTR)cstr;
如果需要LPTSTR,只需要继续强转:
CString cstr;
TCHAR * a = (LPTSTR)(LPCTSTR)cstr;
注意,LPCTSTR和LPTSTR都是宽字符指针。用在Unicode的工程中,上述代码正确。但是,此时a里面的内容是宽字符集,若cstr="22",则a的内容是"0x3200 0x3200",因为00会在第二个字符就遇到,所以写文件的时候如果用普通的fprintf写入第一个2就结束了,因为看到了/0结束符号。如果非Unicode则可以正确写入文件。
如果想把CString转成ASCII的char使用,则需要通过宏T2A完成,并且需要经过GetBuffer(0)作为中转。
USES_CONVERSION;
CString strTime("2008");
const char* st = T2A(strTime.GetBuffer(0));
此时st成功转成const char*类型。此时用普通的fprintf能够正确的写入文件
用fprintf写问文件时换行键用/n表示,不要/r。
而在VC的控件里面,需要/r/n一起表示才能实现换行。
一般情况下/n表示换行,表示移到下一行的同列
/r表示回车,表示放到最左边
参考http://hi.baidu.com/xhero2008/blog/item/2b67f6dc683de8a4cd1166f9.html
相关文章推荐
- 类型转换 -- 使用Unicode下的cannot convert parameter 1 from 'CString' to 'const char *' 解决办法
- CString 和 string, char * , char[], 以及其他类型之间的互相转换小结
- 使用Unicode下的cannot convert parameter 1 from 'CString' to 'const char *' 解决办法
- UNICODE下宽字符的CString转换为const char *
- UNICODE下宽字符的CString转换为const char *和char到WCHAR的相互转换
- UNICODE下宽字符的CString转换为const char *和char到WCHAR的相互转换
- CString, const char*,string与Unicode,multi-byte字符集转换
- CString 和 string, char * , char[], 以及其他类型之间的互相转换小结
- vs2010 使用Unicode字符集 CString 与 char *相互转换
- Unicode编码的项目中CString、char* 、wstring、string的相互转换
- UNICODE下宽字符的CString转换为const char *
- Unicode环境下宽字符CString与ANSI字符const char* 的转换
- UNICODE下CString 和 const char* 的相互转化
- CString”转换为“const char *
- CString转换为const char*
- error C2664: strcpy : 不能将参数 2 从 CString 转换为 const char *;error C2440: “初始化”: 无法从“const wchar_t [15]”
- 在UNICODE编码格式下使用cvSaveImage出现cannot convert from 'CString' to 'const char *
- Unicode下CString和char *之间的互相转换
- 数值型和字符型转换,以及string--char*--CString之间的转换
- error C2664:char *strcpy(char *,const char *)& 无法将参数 2 从CString"转换为const char *