C++里面混乱的字符串操作

单车大叔LKLM 2009-03-12 07:44:55
小弟刚开始用C++做项目,发现c++里面的字符串转换很是麻烦,字符编码搞得我头都大了,做项目的大部分时间都浪费到了字符串转换上面,从char* CString LPCTSTR LPCTWSTR等多个类型的字符类型,大家在做项目的时候是不是都约定某一种编码,省的来回的转换,还有在这方面有没有什么技巧的,望分享。
...全文
181 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
小橙哥 2009-03-15
  • 打赏
  • 举报
回复
确实应尽量不要转来转去,或者用带T的字符类型来定义所有字符串(MFC的用CSting),常量定义用_T("string")宏,这样通用些,如果非要转就把API函数MultiByteToWideChar包装一下就可以了,也比较方便。如下面例子:

//ANSI转成UTF16
CStringW ANSItoUTF16(const CStringA& acp)
{
CStringW utf16;
int len = MultiByteToWideChar(CP_ACP, 0, acp, -1, NULL, 0);
if (len>1)
{
wchar_t *ptr = utf16.GetBuffer(len-1);
if (ptr) MultiByteToWideChar(CP_ACP, 0, acp, -1, ptr, len);
utf16.ReleaseBuffer();
}
return utf16;
}
//UTF16转ANSI
CStringA UTF16toANSI(const CStringW& utf16)
{
CStringA acp;
int len = WideCharToMultiByte(CP_UTF8, 0, utf16, -1, NULL, 0, 0, 0);
if (len>1)
{
char *ptr = acp.GetBuffer(len-1);
if (ptr) WideCharToMultiByte(CP_UTF8, 0, utf16, -1, ptr, len, 0, 0);
acp.ReleaseBuffer();
}
return acp;
}
cuiandk 2009-03-14
  • 打赏
  • 举报
回复
同意用TCHAR
liuzxchina 2009-03-13
  • 打赏
  • 举报
回复
字符集的问题,不是语言的问题,每个语言都需要处理

也许你觉得java,c#提供了简单转换方法,但是C/C++也提供转换方法,只是相对与前2者,转换方法较为复杂。

但是c/c++本身开发效率是没有java,c#高的,所以这样理解就你就觉得比较正常了。

希望你能喜欢上c/c++,当然我也很喜欢c#,java。
龙凤呈祥焱 2009-03-13
  • 打赏
  • 举报
回复
我倒是觉得C的字符串操作是最爽的,
用户 昵称 2009-03-13
  • 打赏
  • 举报
回复
俺一直使用c来操作字符串,俺对字符串,字符集比较了解,所以建议楼主还是多看,多学C的基础知识,从本质上了解C中的字符串。
zhb1190 2009-03-13
  • 打赏
  • 举报
回复
都是用一种的吧!怎么能转来转去呢!除非万不得已的时候才转,
biweilun 2009-03-13
  • 打赏
  • 举报
回复
嫌麻烦就只用多字节就好了,想咋办咋办
wuqiangu 2009-03-13
  • 打赏
  • 举报
回复
前提: 如果你是在VC里做项目

最好避免用C语言的字符串操作。
尽量用VC给定义的通用类型,TCHAR,LPCTSTR等

比如,
TCHAR str1[] = _T(""); // ASNI编码方式,unicode编码方式都可以用 (VC编译器自动选择char 还是wchar_t )
char str2[] = "str2"; // ASNI编码用
wchar_t str3[] = L("str3"); // unicode编码用

也就是说,编译环境没有什么特殊要求的话,用TCHAR,代替常见的char

另外,CString是字符串操作的类,,熟悉了用起来很方便
单车大叔LKLM 2009-03-12
  • 打赏
  • 举报
回复
有时候会用到很多转换,从网上取下来的char* 转换到wchar*,这些都很困惑
stuarts740 2009-03-12
  • 打赏
  • 举报
回复
"做项目的大部分时间都浪费到了字符串转换上面"?
--真的还是假的?如果这样的话,很快你就能熟悉字符串转换了
huziwu 2009-03-12
  • 打赏
  • 举报
回复
自己的项目,就自己统一啊,如果是小组的话,大家也可以商量一种统一方式,这样做也方便以后项目的维护
moonzero 2009-03-12
  • 打赏
  • 举报
回复
TCHAR,LPTSTR,LPCTSTR,MFC里CString
多用用,熟悉了就好了
菜牛 2009-03-12
  • 打赏
  • 举报
回复
是啊,你为什么要来回转呢?为什么不用一种编码呢?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧