目录
前言
一、与字符集的关系
二、代码实例
三、常见宏
前言
众所周知,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字符串。
二、代码实例
为了便于理解,此处看一段代码实例:
代码语言:javascript复制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。
三、常见宏
常见宏对应的具体的数据类型:
代码语言:javascript复制LPSTR – char*
LPWSTR – wchar_t*
LPTSTR – char* 或 wchar_t*
LPCSTR – const char*
LPCWSTR – const wchar_t*
LPCTSTR – const wchar_t* 或 const char*
作者简介: