问题描述
//将CString转成char,之前发过一贴只能转单字节字母组成的字符串,以下可转中文,未验证其它语言char*CStringToCharArray(CStringstr){char*ptr;#ifdef_UNICODELONGlen;len=WideCharToMultiByte(CP_ACP,0,str,-1,NULL,0,NULL,NULL);ptr=newchar[len+1];memset(ptr,0,len+1);WideCharToMultiByte(CP_ACP,0,str,-1,ptr,len+1,NULL,NULL);#elseptr=newchar[str.GetAllocLength()+1];sprintf(ptr,_T("%s"),str);#endifreturnptr;}
解决方案
解决方案二:
之前在网上找了很多高手的方法还是不行,相信有很多像我一样的菜鸟难找到正确的方法,以上方法希望能帮助同胞们。。。。。
解决方案三:
有简单的方法呀,用sprintf_s和强制转换都行。chartest[32];CStringstr="测试";sprintf_s(test,"%s",str);强制转换用(LPTSTR)(LPCTSTR)str;
解决方案四:
很简单的东西如下:#include<atlbase.h>//包含W2A定义的头文件CStringtest;char*pTest;#ifdefUNICODE//unicode下为short或wchar_t==>>char{USES_CONVERSION;pTest=W2A(test.GetBuffer());//注意这种方式在.net版本能支持,6.0版本这样pTest=W2A(test.GetLength());}#else//ansi下就是chartocharpTest=test.GetBuffer();//注意这种方式在.net版本能支持,6.0版本这样pTest=test.GetBuffer(test.GetLength());#endif
解决方案五:
不错
解决方案六:
菜鸟的想法:CStringstr;char*ch;ch=str.GetBuffer(100);
解决方案七:
楼上的方法在unicode下是不可以的
解决方案八:
unicode跟GB2312是要区分开
解决方案九:
很好用~哈哈,谢谢
解决方案十:
友情帮顶下!顺便学习学习!
解决方案十一:
//供参考交流char*CStringToCharArray(CStringstr){return(LPSTR)((_bstr_t)(str));}
解决方案十二:
学到东西啦
解决方案十三:
这得看你的CString变量是ANSI的还是UNICODE的。具体看工程属性“C/C++-->预处理-->预处理器定义”中是否声明了UNICODE。如果是Unicode字符串,那么可以使用WideCharToMultiByte函数将其转换,否则可以用CString的GetBuffer函数获取char*指针(别忘了用完后,用ReleaseBuffer函数释放缓冲区)。其实CString变量可以直接作为LPCTSTR指针使用的。在ANSI版本是LPCTSTR就是一个constchar*,在UNICODE版本中则为constTCHAR*指针。可以用(LPTSTR)(LPCTSTR)将一个CString变量强制转换为char*或者TCHAR*.
解决方案十四:
CStringstr=“test”;char*pchar=(char*)(LPCSTR)str;
解决方案十五:
顶楼上~
解决方案:
顶起来
解决方案:
upupup
解决方案:
谢谢,好东西!
解决方案:
学习!!!!!!!!!!!
解决方案:
这里API和源码例子一个英文的,一个翻译的:
解决方案:
unicode跟GB2312这两个标准怎么区分,怎么用啊我们一般是在哪个环境下类
解决方案:
不错,收藏
解决方案:
引用17楼zyy2008719zyy的回复:
谢谢,好东西!
up
解决方案:
VC++里提供了一起转换函数
解决方案:
CStringstr;str.GetBuffer();
解决方案:
楼主,多谢了啊,我找了很长时间了啊2楼的那个强制转换不行的,在vc6下可以但是在vs2008,unicode下是不行的。
解决方案:
引用7楼yuhaozx的回复:
unicode跟GB2312是要区分开
这里面有牵涉到GB2312吗?虽然中文是用GB2312的,但是C++默认是ANSI标准,应该是ANSI和Unicode间的问题吧?
解决方案:
引用7楼yuhaozx的回复:
unicode跟GB2312是要区分开
我知道了,我刚在网上查了一下,原来使用2个字节来代表一个字符的各种汉字延伸编码方式,称为ANSI编码,在简体中文系统下,ANSI编码就代表GB2312编码。
解决方案:
用GetBuffer或GetBufferSetLength两个函数可以转化。
解决方案:
谢谢楼主,找了好久了,其它方法在VS2008下用不了的。
解决方案:
用一个数组反过来用用getbuffer
解决方案:
学习学习,目前还没有用到这个~收藏备用~
解决方案:
太感谢了。。。
解决方案:
不错,收藏
解决方案:
很有收获的一个帖子…
解决方案:
直接用宏转化不就OK了么CStringa;char*b;USES_CONVERSION;b=T2A(a);
解决方案:
该回复于2011-11-28 09:22:21被版主删除
解决方案:
直接这样就行char=CString.GetBuffer(CString.GetLength());楼主太麻烦了
解决方案:
顶顶顶,学到东西了。
解决方案:
嗯,的确学到东西了
解决方案:
用一个类之前在MSDN里把这个类看一遍才是对自已负责的态度。
解决方案:
看我转换并调用一个计算器:CStringSTemp(_T("calc.exe"));USES_CONVERSION;char*Str=T2A(STemp.GetBuffer());//系统宏T2A(W2A)WinExec(Str,SW_SHOW);
解决方案:
看我的例子并调用一个计算器CStringSTemp(_T("calc.exe"));USES_CONVERSION;char*Str=T2A(STemp.GetBuffer());//系统宏T2A(W2A)WinExec(Str,SW_SHOW);
解决方案:
很好用!
解决方案:
对于unicode的字符转换很蛋疼,有时网上找的一些第三方代码,里面的字符处理不是unicode的,而且出现的地方有多,很蛋疼,要是MS能把编译器设计成自动识别多好啊,就不用改那么多了