C++基本数据类型中表示字符的有两种: char、wchar_t。
char叫多字节字符,一个char占1个字节,之所以叫多字节字符是因为它表示一个英文字符时是一个字节,而中文字符时是多个字节。
wchar_t被称为宽字符,一个wchar_t占2个字节。之所以叫宽字符是因为所有的字都要赋值时,前面要加L,如:wchar_t str[3]=L”中国”;。
注意:两种字符对应的字符串函数也不一样,strlen()对应wcslen(),strcpy()对应wcscpy)一般把char类型函数中的" str"替换为" wcs"即可。
#include<iostream> #include <stdio.h> #include <Locale.h> //解决中文乱码问题头文件 #include <string.h> using namespace std; int main(){ char *str1 = "A中"; 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));//计算字符个数,遇到\0结束 int a; cin >> a; return 0; } /* 输出结果一个为2,一个为3 */
Win32API中带字符串的API一般都有两个版本,例如CreateFileA和CreateFileW。
当然也有例外,例如GetProcAddress函数。A代表ANSI编码,W代表Unicode字符集。
Windows中的Unicode字符一般指UCS2的UTF16-LE编码。
看如下预编译指令:
#ifdef UNICODE #define MessageBox MessageBoxW #else #define MessageBox MessageBoxA #endif // !UNICODE