有比MultiByteToWideChar和WideCharToMultiByte更简单的字符串转换宏,你相信吗?
头文件 d:\program files\microsoft visual studio 8\vc\atlmfc\include\atlconv.h
若是要使用ATL字符串转换宏,请先定义 USES_CONVERSION; // 只须要调用一次,就能够在函数中进行屡次转换ide
下面一个例子: 函数
USES_CONVERSION; // 只须要调用一次,就能够在函数中进行屡次转换 char a[12] = "china"; ::MessageBoxW( NULL, A2W(a), L"", MB_ICONASTERISK|MB_TASKMODAL|MB_OK );
使用 ATL 转换宏,因为不用释放临时空间,因此使用起来很是方便。可是考虑到栈空间的尺寸(VC 默认2M),使用时要注意几点: spa
一、只适合于进行短字符串的转换; code
二、不要试图在一个次数比较多的循环体内进行转换; blog
三、不要试图对字符型文件内容进行转换,由于文件尺寸通常状况下是比较大的; ci
四、对状况 2 和 3,要使用 MultiByteToWideChar() 和 WideCharToMultiByte();字符串
使用 ATL 提供的转换宏。 io
A2BSTR | OLE2A | T2A | W2A |
A2COLE | OLE2BSTR | T2BSTR | W2BSTR |
A2CT | OLE2CA | T2CA | W2CA |
A2CW | OLE2CT | T2COLE | W2COLE |
A2OLE | OLE2CW | T2CW | W2CT |
A2T | OLE2T | T2OLE | W2OLE |
A2W | OLE2W | T2W | W2T |
上表中的宏函数,其实很是容易记忆:table
2 | 好搞笑的缩写,to 的发音和 2 同样,因此借用来表示“转换为、转换到”的含义。 |
A | ANSI 字符串,也就是 MBCS。 |
W、OLE | 宽字符串,也就是 UNICODE。 |
T | 中间类型T。若是定义了 _UNICODE,则T表示W;若是定义了 _MBCS,则T表示A |
C | const 的缩写 |