cpp 调库总遇到字符处理的问题,开坑慢填。
字符集
ANSI C 标准 和 Windows 三套字符/字符串数据类型实现 需要说明的是,ANSI C 标准并没有具体规定基本类型应占字节数,具体占位和平台 CPU + OS + Compiler 有关
CPU + OS + Compiler
#include
UNICODE
// 头文件 Winnt.h// Generic types TCHAR LPTSTR LPTCH#ifdef UNICODE typedef wchar_t TCHAR; // char 是 ANSI C data type#else typedef unsigned char TCHAR;#endiftypedef TCHAR *LPTSTR, *LPTCH;// 8-bit character specific 去掉表示类型的Ttypedef unsigned char CHAR; // char 是 ANSI C data typetypedef CHAR *LPSTR, *LPCH;// Unicode specific (wide characters) 表示类型的T换成宽字符Wtypedef unsigned wchar_t WCHAR;typedef WCHAR *LPWSTR, *LPWCH;
Windows API 三套处理字符/字符串的函数 generic version、window code page version 用 “A” 标识、Unicode version 用 “W” 标识 主要看 Standard C runtime library 中的字符处理函数
generic version
window code page version
Unicode version
wcs/_wcs
str
_mbs
_tcs
// to use the generic functions and compile for Unicode.#define _UNICODE#include #include
需要说明的是,带下划线的 _UNICODE 用于standard C library,而不带下划线 UNICODE 用于Microsoft windows runtimes
_UNICODE
相互转换 本质只有两种字符类型转换 MultiByteToWideChar、WideCharToMultiByte
MultiByteToWideChar
WideCharToMultiByte
字符串处理 STL 中的 指路 cppreference/string 支持三种 general types of strings
std::basic_string
std::basic_string_view(C++17)
Null-terminated strings
basic_string
Null-terminate string
_tcstok