C++基本数据类型中表示字符的有两种:char、wchar_t。
char叫多字节字符,一个char占一个字节,之所以叫多字节字符是因为表示一个英文字符时是一个字节,而表示中文字符时是多个字节。
wchar_t被称为宽字符,一个wchar_t占2个字节,之所以叫宽字符是因为所有的字都要用两个字节(即一个wchar_t)来表示,不管是英文还是中文。用常量字符给wchar_t变量赋值时,前面要加L,wchar_t[3]=L"中国"。
注意:两种字符对应的字符串函数也不一样,strlen()对应wcslen(),strcpy()对应wcscpy(),一般把char类型函数中的str 替换成wcs即可。
#include <stdio.h>
#include <string.h>
#include <locale.h>//让控制台支持宽字节输出
int main()
{
char* str1 = "A中";//3个字符(含\0),4个字节
//计算字符个数,遇到\0结束.
printf("%s------%d\n", str1, strlen(str1));
_wsetlocale(LC_ALL, L"chs");
wchar_t* str2 = L"A中";//必须加个L表示字符串是UNICODE.
wprintf(L"%s------%d\n", str2, wcslen(str2));
//2个字符,4个字节
return 0;
}
WIN32 API中带字符串的API一般都有两个版本,例如CreateFileA和CreateFileW。当然也有例外,例如GetProcAdress函数。
A代表ANSI编码,W代表Unicode字符集。Windows中的Unicode字符一般指UCS2得UTF-16编码。
看如下预编译指令:
#ifdef UNICODE
#define MessageBox MessageBoxW
#else
#define MessageBox MessageBoxA
#endif //!UNICODE