多字节字符与宽字节字符20190914

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

发布了140 篇原创文章 · 获赞 26 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_41211961/article/details/100821527