c++ 彻底搞懂 wchar_t WCHAR LPCSTR PCSTR TCHAR

前言:

最近在搞 win32api 有很多的变量根本不认识
WCHAR LPCSTR PCSTR TCHAR L" "
这都是啥东西
弄的稀里糊涂的
这里写个笔记 巩固一下基础

首先我们要先了解一下
字符编码unicode utf-8 Ansi

然后我们还要了解一下
wchar_t

std::wstring
std::string 与 std::wstring 互转换

也就是宽字符

c++ 彻底搞懂 wchar_t WCHAR LPCSTR PCSTR TCHAR_第1张图片

wchar_t 是占2字节 char 是1字节
一个字节 8位 wchar_t 就是 16位
char 就是 8位

ok 继续向下说

TCHAR

c++ 彻底搞懂 wchar_t WCHAR LPCSTR PCSTR TCHAR_第2张图片

这里有个宏 如果定义 unicode宏 那么 WCHAR 也叫TCHAR

c++ 彻底搞懂 wchar_t WCHAR LPCSTR PCSTR TCHAR_第3张图片

WCHAR 就是 wchar_t

因为C++支持两种字符串,即常规的ANSI编码(使用"“包裹)和Unicode编码(使用L”"包裹),这样对应的就有了两套字符串字符串处理函数,比如:strlen和wcslen,分别用于处理两种字符串

微软将这两套字符集及其操作进行了统一,通过条件编译(通过_UNICODE和UNICODE宏)控制实际使用的字符集,这样就有了_T("")这样的字符串,对应的就有了_tcslen这样的函数

为了存储这样的通用字符,就有了TCHAR:

当没有定义_UNICODE宏时,TCHAR = char,_tcslen = strlen

当定义了_UNICODE宏时,TCHAR = wchar_t ,_tcslen = wcslen

当我们定义了UNICODE宏,就相当于告诉了编译器:我准备采用UNICODE版本。这个时候,TCHAR就会摇身一变,变成了wchar_t。而未定义UNICODE宏时,TCHAR摇身一变,变成了unsigned char。这样就可以很好的切换宽窄字符集。

tchar可用于双字节字符串,使程序可以用于中日韩等国 语言文字处理、显示。使编程方法简化。

所以在C++中,TCHAR宏统一了单双字节。降低程序员的工作负荷。。

也就是说 TCHAR 到底是 wchar_t 还是 char 要看 是否定义 unicode 的宏 可以自由的切换

LPCSTR

c++ 彻底搞懂 wchar_t WCHAR LPCSTR PCSTR TCHAR_第4张图片

LPCSTR一个32位指针,指向Unicode和DBCS可移植的字符串。

在这里插入图片描述

lpcstr 就是个const char 他是 32位 也就是 4字节的

那么 LPCWSTR

c++ 彻底搞懂 wchar_t WCHAR LPCSTR PCSTR TCHAR_第5张图片

在这里插入图片描述

他就是CONST WHCAR 就是 CONST wchar_t

基本上明白了 w 带个 w 就是宽字符的 意思
他们的祖宗分别都是 这个俩玩意
char 与 wchar_t

完全就可以这样转换 因为都是 const wchar_t *
c++ 彻底搞懂 wchar_t WCHAR LPCSTR PCSTR TCHAR_第6张图片

string 与 wstring 区别 也是在这里 宽字符

为啥搞 宽字符呢? 因为 unicode 编码
为啥弄 unicode 编码 可以看 我上面的链接
ok 就到这里了

你可能感兴趣的:(c/c++)