写点什么

C++ 中字符三兄弟(WCHAR、CHAR、TCHAR)

作者:liuzhen007
  • 2022 年 5 月 17 日
  • 本文字数:983 字

    阅读完需:约 3 分钟

目录


前言

一、与字符集的关系

二、代码实例

三、常见宏



前言

众所周知,C++中的字符分成两种类型:wchar_t 和 char。其中,WCHAR 对应 wchar_t,CHAR 对应 char,TCHAR 是一种条件编译的类型,根据条件动态代表 wchar_t 或者 char。

一、与字符集的关系

其实,它们三者和对应的字符集相关。C 语言用 char 来表示一个 8 位 ANSI 字符,用 wchar_t 表示一个 16 位的 Unicode 字符。strlen 返回一个 ANSI 字符串的长度,wcslen 返回一个 Unicode 字符串的长度。

其中,ANSI 是单字节字符集,每个字符占一个字节,最多表示 256 个符号;Unicode 是双字节字符集,每个字符占两个字节;


char 表示一个 ANSI 字符。

wchar_t 表示一个 Unicode 字符。

std::string 表示一个 ANSI 字符串。

std::wstring 表示一个 Unicode 字符串。

二、代码实例

为了便于理解,此处看一段代码实例:

WINBASEAPIBOOLWINAPIFillConsoleOutputCharacterA(    _In_ HANDLE hConsoleOutput,    _In_ CHAR cCharacter,    _In_ DWORD nLength,    _In_ COORD dwWriteCoord,    _Out_ LPDWORD lpNumberOfCharsWritten    );
WINBASEAPIBOOLWINAPIFillConsoleOutputCharacterW( _In_ HANDLE hConsoleOutput, _In_ WCHAR cCharacter, _In_ DWORD nLength, _In_ COORD dwWriteCoord, _Out_ LPDWORD lpNumberOfCharsWritten );
#ifdef UNICODE#define FillConsoleOutputCharacter FillConsoleOutputCharacterW#else#define FillConsoleOutputCharacter FillConsoleOutputCharacterA#endif // !UNICODE
复制代码


点击并拖拽以移动

上述代码,根据是否支持 UNICODE 字符集,FillConsoleOutputCharacter 方法对应不同的两种实现,分别是 FillConsoleOutputCharacterW 和 FillConsoleOutputCharacterA。

三、常见宏

常见宏对应的具体的数据类型:

LPSTR – char*

LPWSTR – wchar_t*

LPTSTR – char* 或 wchar_t*

LPCSTR – const char*

LPCWSTR – const wchar_t*

LPCTSTR – const wchar_t* 或 const char*


作者简介:😄大家好,我是 Data-Mining(liuzhen007),是一位典型的音视频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对 WebRTC、FFmpeg 和 Electron 有非常深入的了解,😄公众号:玩转音视频。同时也是 CSDN 博客专家(博客之星)、华为云享专家(共创编辑、十佳博主)、51CTO 社区编辑、InfoQ 签约作者,欢迎关注我分享更多干货!😄

发布于: 刚刚阅读数: 3
用户头像

liuzhen007

关注

敲代码,搞开发。 2021.05.01 加入

本人深耕音视频技术,走全栈路线,前后端通吃,兼顾各端与流媒体服务器。 博客主页地址:https://liuzhen.blog.csdn.net 微信公众号:玩转音视频 欢迎交流学习!

评论

发布
暂无评论
C++中字符三兄弟(WCHAR、CHAR、TCHAR)_c_liuzhen007_InfoQ写作社区