WTL/MFC多字节和Unicode字符转换

9 篇文章 0 订阅
8 篇文章 0 订阅

我们在最开始学习MFC的时候,毫无疑问会遇到这样的问题。

VC6的设置:多字节。

vs的默认设置:Unicode,在属性中可以改成多字节。

多字节编码:char,string,CStringA。

Unicode编码:wchar_t,wstring,CStringW。

注意:如果项目是Unicode,那么CString就被定义为CStringW,否则就是CStringA。

附:

LPSTR = char*;LPCSTR = const char*;

LPWSTR = wchar_t*;LPCWSTR = const wchar_t*;

至于LPCTSTR也是根据项目字符集来定义为LPCWSTR(Unicode)或LPCSTR(多字节)。

OK,上面的定义很明显了,注意用的时候别弄混了,我觉得最好的方式是,使用wchar_t和wstring(api大多使用unicode,即使是多字节版本也是把多字节转成unicode再去调用unicode版api),我不太喜欢CString。

接下来就是转换:

// C++

char* 到 string:string str("char"); 或者string str = "char";

string 到 char*:const char* ch = str.c_str();

wchar_t* 和 wstring与上相同。

// MFC

char* 到 CStringA:CStringA str("char");

CStringA 到 char*:const char* ch = str.operator LPCSTR(); (注意:反对使用GetBuffer,因为使用这个,必须要ReleaseBuffer,而且很多时候没必要去分配空间)

wchar_t* 和 CStringW与上相同。

// 字符集之间转换

char* 到 wchar_t*:CA2W a2w("char");  const wchar_t* wch = a2w.operator LPCWSTR();

wchar_t* 到 char*:CW2A w2a(L"wchar_t"); const char* ch = w2a.operator LPCSTR();  (注意:反对使用_T("chs")这种方式,程序字符集在一开始就该确定,而且最好选择Unicode)

关于CA2W和CW2A这两个类,可以在atlconv.h中找到源代码,其实就是对WideCharToMultiByte和MultiByteToWideChar的封装。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值