天天看点

USES_CONVERSION 和字节转换A2W, A2T, W2A, T2A

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);  

继续阅读