返回顶部

ANSI/Unicode字符串简单介绍

 1.1、wchar_t、char区别

  ANSI:char,可以用strcat()、strcpy()、strlen()等str开头的函数处理char*字符串;

  UNICODE:wchar_t是Unicode字符的数据类型,是我们常说的宽字符;可以用wcscat()、wcscpy()、wcslen(0等wcs开头的函数处理字符串,使用时需要在前面加一个L或者使用_T()。wchar_t的实际定义是:

typedef unsigned short wchar_t;
typedef wchar_t WCHAR;//实际WCHAR与wchar_t是相同的。

  对TCHAR而言,在unicode字符集下,typedef wchar_t TCHAR;  否则是typedef char TCHAR;

  char转换为wchar_t,方法一:使用TEXT();

  方法二:

wchar_t* c2w(const char* str)
{
    int length = strlen(str);
    wchar_t* wstr = (wchar_t*)malloc(sizeof(wchar_t)*length);
    memset(wstr,0,length*sizeof (wchar_t));
    MultiByteToWideChar(CP_ACP,0,str,strlen(str),wstr,length);
    return wstr;
}

  但是一般情况下程序只会用一种字符集,这种相互转换感觉也没什么意义...?

1.2、 ANSI、Unicode之间的转换

方法一:

  使用MultiByteToWideChar将ANSI字符转换成Unicode字符,使用WideCharToMultiByte将Unicode字符转换成ANSI字符。

方法二:

  使用_T将ANSI转换成一般类型字符串,使用L将ANSI转换成Unicode字符串。

方法三:

  使用ATL的转换宏和类,ATL宏各字符的含义 

  ATL3.0   C表示常量,2表示to,EX表示开辟一定大小的缓冲,sourceType和DestinationType可以是A/T/W/OLE,分别表示ANSI/Unicode/一般类型/OLE字符串;

  ATL7.0   为了与ATL3.0区别,第一个C表示类,第二个C表示常量...

比如CA2CT表示将ANSI转换成Unicode字符串常量。

附录:常用的字符串以及指针的类型定义

类型 MBCS bulids Unicode builds
WCHAR wchar_t wchar_t
LPSTR char* char*
LPCSTR const char* const char*
LPWSTR wchar_t* wchar_t*
LPCWSTR wchar_t* wchar_t*
TCHAR char wchar_t
LPTSTR TCHAR* TCHAR*
LPCTSTR const TCHAR* const TCHAR*
posted @ 2020-09-29 11:13  Zoya23  阅读(275)  评论(0)    收藏  举报