USES_CONVERSION 是什么?
USES_CONVERSION是ATL中的一个宏定义, 定义用于编码转换如W2A,A2W使用的一些局步变量。用于编码转换(用的比较多的是CString向LPCWSTR转换),进行类型转换时不可缺少。在ATL下使用要包含头文件#include "atlconv.h"
USES_CONVERSION它是在堆栈上分配空间的,也就是说你在你使用的函数未结束就不会被释放掉。
什么是多字节:
多字节是指使用多个字节(1-3)表示一个字符。(eg. gbd, utf-8, big5)
什么是宽字节:
宽字节一般是固定使用2个字节表示一个字符。(eg. unicode)
什么时候使用?
在程序中,一般最好使用unicode字符集显示字符,Windows的内核就是用unicode编码的,unicode字符集包含了世上大多数字符。unicode在windows下的不同本地环境下都能是正常显示。
但是在使用字符串和其他程序进程(本地进程或者远端进程)进行交互时,最好使用utf8编码字符。
原因是:utf8可以表示最多的字符,所有系统通用,且不像宽字节一样每个字符都要两个字节表示,数字和字母等都是使用一个字节表示,有时可以节省大量字符串流。
windows 如何进行转换:
MultiByteToWideChar 多字节转宽字节
WideCharToMultiByte 宽字节转多字节
ATL 给出的简单的使用宏进行调用(需要借助本地变量)
头文件:include "atlconv.h
A2W
USES_CONVERSION;
CString tmpStr;
char*LineChar="fdsfdsa";
const WCHAR * cLineChar = A2W(LineChar);
tmpStr=cLineChar;
W2A
USES_CONVERSION;
CString tmpStr;
WCH LineChar="fdsfdsa";
const char* cLineChar = A2W(LineChar);
A2T
USES_CONVERSION;
char * pChar="char to cstring";
CString cTemp=A2T(pChar);
T2A
USES_CONVERSION;
CString cTemp =_T("char to cstring");
char * pChar=A2T(pChar);