char和wchar_t char 和 wchar_t 都是 C++ 中的字符类型,但它们之间有一些区别。 char 是一个字节(8 位)长,而 wchar_t 是两个字节(16 位)或四个字节(32 位)长,具体取决于编译器和操作系统。 因此,wchar_t 可以表示更多的字符,包括 Unicode 字符。 在 Windows 操作系统中,许多 API 函数都使用 wchar_t 类型的字符串参数。如果需要处理 Unicode 字符或调用这些函数,则应使用 wchar_t 类型。否则,可以使用 char 类型。 为了使程序适配多语言场景,不建议在代码中使用char或wchar_t,可直接使用TCHAR类型定义字符(串),需要包含对应头文件<TCHAR.H>(在包含了Windows.h时则不需要)。TCHAR在源码中的定义如下: 1 2 3 4 5 #ifdef _UNICODE typedef wchar_t TCHAR; #else typedef char TCHAR; #endif
同理,在涉及到字符串操作的接口时,也推荐使用支持多语言场景的接口_tcscpy、_tcslen、_tcscat,而不是strcpy_s、strlen_s、strcat_s或wcscpy、wcslen、wcscat。头文件<TCHAR.H>中有很多类似的宏定义。 前缀L 和 前缀_T 通常,我们使用双引号标识ANSI字符串,比如:”I’m an example. “ 这种类型的字符串,每个字符占用一个字节。当我们想要标识UNICODE字符串时,需要添加前缀L,比如:L”I’m an example. “ 。这种类型的字符串,每个字符占用两个字节。当然,为了适配多语言场景,也设计了一个通用的字符串前缀,即_T(或TEXT),这个前缀也是宏定义,其在源码中的定义如下: 1 2 3 4 5 6 7 #ifdef _UNICODE #define _T(c) L##c #define TEXT(c) L##c #else #define _T(c) c #define TEXT(c) c #endif
WCHAR LPCTSTR LPSTR LPWSTR WCHAR是一种Unicode编码类型,其在源码中的定义如下: 1 2 3 4 5 #if !defined(_NATIVE_WCHAR_T_DEFINED) typedef unsigned short WCHAR; #else typedef wchar_t WCHAR; #endif
LPCTSTR是一种指针类型,该类型名可按照如下方式解读: LP - Pointer, C - Constant, T - TCHAR, STR - String. 根据我们创建工程时的配置,LPCTSTR会映射为LPCSTR(ANSI)或LPCWSTR(Unicode)。 LPSTR是一种指针类型,可能指向的数据编码类型为 ANSI 或 UTF-8,具体由protocol文件决定。LPSTR在源码中的定义如下: typedef char* PSTR, *LPSTR; LPWSTR也是一种指针类型,它用32位字符表示16位的Unicode字符,其在源码中的定义如下: 1 typedef wchar_t * LPWSTR, *PWSTR;
_stprintf_s _stprintf_s() 函数的第一个参数是要格式化的字符串,第二个参数是要插入到字符串中的值。 1 2 3 4 #ifdef UNICODE #define _stprintf_s swprintf_s #else #define _stprintf_s sprintf_s
1 2 TCHAR str[256 ]; _stprintf_s(str, _T("(%f,%f,%f)" ), pt[0 ], pt[1 ], pt[2 ]);
原文链接: https://kettycode.github.io/2024/02/19/cpp/tip/char/
版权声明: 转载请注明出处.