C++中的两种字符类型 wchar_t VS char
  5Z6Aj0LQwRjK 2023年12月22日 60 0


前言

众所周知,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字符串。

二、代码实例

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

WINBASEAPI
 BOOL
 WINAPI
 FillConsoleOutputCharacterA(
In HANDLE hConsoleOutput,
In CHAR cCharacter,
In DWORD nLength,
In COORD dwWriteCoord,
Out LPDWORD lpNumberOfCharsWritten
 );WINBASEAPI
 BOOL
 WINAPI
 FillConsoleOutputCharacterW(
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。

WCHAR strPath[MAX_PATH]={0};
	//获取当前路径
	GetCurrentDirectoryW(MAX_PATH,strPath);
	TRACE("###strPath=%ls",strPath);

三、常见宏

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

LPSTR – char*
 LPWSTR – wchar_t*
 LPTSTR – char* 或 wchar_t*LPCSTR – const char*
 LPCWSTR – const wchar_t*
 LPCTSTR – const wchar_t* 或 const char*

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月22日 0

暂无评论

推荐阅读
  8Tw5Riv1mGFK   20天前   31   0   0 C++
  BYaHC1OPAeY4   13天前   33   0   0 C++
  yZdUbUDB8h5t   16天前   22   0   0 C++
  oXKBKZoQY2lx   3天前   16   0   0 C++
5Z6Aj0LQwRjK