win32中的宽字符

宽字符

数据类型容器、模板
ASCII一个字符一个字节
GB码(扩展了的ASCII)英文字符一个字节
GB码中文字符两个字节
UNICODE字符集(unicode编码实际指的是utf-16)常用字符两个字节

宽字符: 用多个字节来表示的字符称之为宽字符(只要不是以单字节存储都可称为宽字符)

注:宽字符不等同与UTF-16更不等同与UNICODE

wchar_t 宽字符类型

C/C++中对宽字符定义了一个类型 wchar_t 用来存储两字节宽度的宽字符

常用的字符串操作字符

strlen()        wcslen()
strcmp()        wcscmp()
strcat()        wcscat()
strcpy()        wcscpy()
wchar_t arr[] = L"Hello World";
printf("%d \r\n",wcslen(arr));

在同一个项目工程里务必只使用一种编码规则,一面发生管理紊乱

Windows定义了一系列新的类型

原生win32
typedefcharCHAR
typedefshortSHORT
typedefintINT
typedeflongLONG
typedefunsigned longDWORD
typedefintBOOL
typedefunsigned charBYTE
typedefunsigned shortWORD
typedeffloatFLOAT

不同项目间合作 单字符和宽字符的问题

常规解决方案(不推荐):

  1. 事先约定使用同一种编码规范

  2. 在接口处通过某些函数完成两种编码的转换

    MultiByteToWideChar() WideCharToMultiByte()

微软爸爸的解决方案:

TCHAR 类型

VC6中 :定义

#ifdef UNICODE
    typedef wchar_t TCHAR;
#else
    typedef unsigned char TCHAR;

使用

TCHAR arr[] = TEXT"Hello World";