char, wchar_t, TCHAR 字符全总结 & c++字符串操作经验集
来源:互联网 发布:手机美发软件 编辑:程序博客网 时间:2024/04/30 11:57
字符类型、字符指针类型、字符串字面值
字符类型:
char, wchar_t, CHAR, WCHAR, TCHAR, UCHAR, BYTE, TBYTE
char 是C语言标准数据类型,字符型。通常由编译器决定一个char对象有多少个字节组成,一般是一字节。
wchar_t 是char的Unicode版本。相当于 unsigned short。一般两个字节。
CHAR 参照定义: typedef char CHAR;
WCHAR 参照定义:typedef wchar_t WHAR;
TCAHR 通用版字符类型:在ANSI编译方式下为 char , 在Unicode 编译方式下为 wchar_t。
UCHAR 相当于unsigned char
BYTE 相当于unsigned char。在取得字符编码(00 - FF)时,非常有用。
TBYTE 通用版字符类型:在ANSI编译方式下为 char , 在Unicode 编译方式下为 wchar_t。
参照 tchar.h头文件定义:
// _UNICODE 版#ifndef__TCHAR_DEFINEDtypedefwchar_t_TCHAR;typedefwchar_t_TSCHAR;typedefwchar_t_TUCHAR;typedefwchar_t_TXCHAR;#define __TCHAR_DEFINED#endiftypedefwchar_tTCHAR;//非_UNICODE 版#ifndef__TCHAR_DEFINEDtypedefchar _TCHAR;typedefsigned char _TSCHAR;typedefunsigned char _TUCHAR;typedefchar _TXCHAR;#define__TCHAR_DEFINED#endiftypedefcharTCHAR;
// 字符定义总结如下: 自适应非UNICODE UNICODE_TCHARchar wchar_t_TSCHARsigned char wchar_t_TUCHARunsigned char wchar_t_TXCHARchar wchar_tTCHARchar wchar_t
字符指针类型:
PSTR,PWSTR,通用版: PTSTR,PTCH
LPSTR,LPWSTR,通用版:LPTSTR , LPTCH
typedef CHAR *PSTR, *LPSTR;
typedef WCHAR *PWSTR, *LPWSTR;
PCSTR,PCWSTR,通用版:PCTSTR
LPCSTR,LPCWSTR,通用版:LPCTSTR
typedef CONST CHAR *PCSTR, *LPCSTR;
typedef CONST WCHAR *PCWSTR, *LPCWSTR;
解释 通用版 非UNICODE UNICODE 字符定义 TCHAR CHAR WCHAR 字符指针 PTCHAR CHAR * WCHAR * 字符串指针 LPTCH & PTCH LPSTR & PSTR LPWSTR & PWSTR 字符串指针 LPTSTR & PTSTR LPSTR & PSTR LPWSTR & PWSTR 静态字符串指针 LPCTSTR & PCTSTR LPCSTR & PCSTR LPCWSTR & PCWSTR
字符串字面值:
参照tchar.h头文件如下定义:
// _UNICODE 版#define__T(x)L ## x//非_UNICODE 版#define__T(x)x// -----------------------------------------#define _T(x) __T(x)#define _TEXT(x) __T(x)// 总结如下:// 字符串字面值表示:// 非UNICODE: " "// UNICODE : L" "// 字符串字面值表示,总结如下: 通用 非UNICODE UNICODE__T(x) x L ## x_T(x) x L ## x_TEXT(x) x L ## x
参照winnt.h头件如下定义:
#ifdef UNICODE // 以下是Unicode相关定义 #define __TEXT(quote) quote // 定义字符串常量宏 #endif /* UNICODE */#define TEXT(quote) __TEXT(quote)// 定义另一个字符串常量宏
字符串表示 __TEXT(quote) quote L ## quote字符串表示 TEXT(quote) quote L ## quote
c++字符串操作经验集
字符串处理函数总结:
标准c中的strcpy,strchr,strcat等只能用于ANSI字符串,不能正确处理Unicode字符串,因此也提供了一组补充函数,功能等价,但用于Unicode码。
我们来看看string .h字符串头文件中是怎样处理char*和wchar_t*两个字符串版本的:
char *strcat(char*,const char*);
wchar_t *wcschr(wchat_t*,const wchar_t *)
类似的还有strchr/wcschr,strcmp/wcscmp,strlen/wcslen...
ANSI 操作函数以str开头 strcpy
Unicode 操作函数以wcs开头 wcscpy
MBCS 操作函数以_mbs开头 _mbscpy
ANSI/Unicode 操作函数以_tcs开头 _tcscpy(C运行期库)
ANSI/Unicode 操作函数以lstr开头 lstrcpy(Windows函数)
各种字符串处理函数库
1 C运行库对字符串的处理:
str*系列: C运行库早期使用strlen strcpy等str*系列函数对char类型的字符串进行处理。
wcs*系列: C编译器内置了wchar_t这个16位宽字节类型后,使用新的wcslen wcscpy等wcs*系列的函数对wchar_t类型的字符串进行处理。
_tcs*系列: C运行库定义了宏_tcslen _tcscpy等_tcs*系列的宏定义,_tcs*系列函数在编译时根据是否预定义了宏_UNICODE而确定是采用wcs*系列函数,否则采用str*系列函数。
_tcs*_s系列: C运行库的最新安全字符串函数,为了防止缓冲区溢出而定义的新函数。
2 windows对字符串的处理:
Windows开发团队在winnt.h中定义了新的数据类型CHAR(char), WCHAR(wchar_t), TCHAR,TCHAR最终在编译时根据是否预定义了UNICODE宏而确定是CHAR还是WCHAR。
lstr*a系列: 在windows操作系统的Kernel32.dll中定义,处理CHAR类型的字符串,其实是对lstr*w的一层包装。
lstr*w系列: 在windows操作系统的Kernel32.dll中定义,处理WCHAR类型的字符串。
lstr*系列: lstr*系列函数也是在编译时才根据是否预定义了UNICODE宏来确定采用lstr*a系列函数,还是lstr*w系列函数。
个人推荐用lstr*系列,因为这个是windows api,这样写出来的程序不用把C运行库链接进来。
有个需要注意的是,C运行库的_UNICODE和Windows的UNICODE,两个宏,要么同时定义,要么同时不定义。C运行库前缀下划线是为了遵守那个该死的C++标准(对于不属于C++标准的宏加下划线),而Windows没有遵守那个标准
字符(串)之间的转换
1.使用ATL的字符串转换宏,可以实现不同类型的字符串转换。
在宏名称里面,分别用A,W,T代表ANSI字符串,Unicode字符串,以及TCHAR字符串。
并分别用CA,CW,CT来代表相应的const字符串。
对ANSI字符串进行转换操作的宏有A2W,A2T,A2CW,A2CT。
对Unicode字符串进行转换操作的宏有W2A,W2T,W2CA,W2CT。
对TCHAR字符串进行转换操作的宏有T2W,T2A,T2CW,T2CA。
*需要注意的是: 在使用以上宏的时候,必须在程序中定义如下宏,
USES_CONVERSION;
2. 字符串与其他类型之间的转换
字符串和INT的相互转换
通过atoi,_wtoi,_ttoi可以分别把ANSI,Unicode和TCHAR字符串转换成INT。
通过_itoa,_itow,_itot可以分别把INT转换成ANSI,Unicode和TCHAR字符串。
字符串和LONG的相互转换
通过atol,_wtol,_ttol可以分别把ANSI,Unicode和TCHAR字符串转换成LONG
通过_ltoa,_ltow,_ltot可以分别把INT转换成ANSI,Unicode和TCHAR字符串。
字符串和DOUBLE的相互转换
通过atof,_wtof,_ttof可以分别把ANSI,Unicode和TCHAR字符串转换成DOUBLE
通过_fcvt 可以把DOUBLE数值转换为ANSI字符串。
ANSI 和 UNICODE 的函数对应表
ANSI UNICODE 通用
(char.h) (wchar.h) (tchar.h)
char wchar_t TCHAR
char * wchar_t * PTCHAR (PTSTR,LPWSTR,PWSTR,WCHAR)
printf wprintf _tprintf
scanf wscanf _tscanf
atoi _wtoi _ttoi
atol _wtol _ttol
itoa _itow _itot
ltoa _ltow _ltot
atof _wtof _tstof
strlen wcslen _tcslen
strcat wcscat _tcscat
strcpy wcscpy _tcscpy
strcmp wcscmp _tcscmp
附:C语言字符串函数详解 strcpy、strcmp、strcat、strlen、strstr
http://write.blog.csdn.net/postedit/7300418
atoi, itoa 字符串转换函数源代码
http://blog.csdn.net/ltag0110rtag/article/details/7363919
- C/C++,Windows/MFC, char, wchar_t, TCHAR 字符全总结 & c++字符串操作经验集
- C/C++,Windows/MFC, char, wchar_t, TCHAR 字符全总结 & c++字符串操作经验集(转)
- char, wchar_t, TCHAR 字符全总结 & c++字符串操作经验集
- char, wchar_t, TCHAR 字符全总结 & c++字符串操作经验集
- char, wchar_t, TCHAR 字符全总结 & c++字符串操作经验集
- C++字符类型TCHAR、char和wchar_t
- C++字符类型TCHAR、char和wchar_t
- tchar char 字符 和 字符数组 字符串操作
- char * ,wchar_t * ,WCHAR * , TCHAR *
- char wchar_t WCHAR TCHAR
- TCHAR、wchar_t、char及字符串处理函数区别(转)
- TCHAR、wchar_t、char及字符串处理函数区别
- TCHAR、wchar_t、char及字符串处理函数区别
- ANSI,Unicode;char,wchar_t, TCHAR;LPSTR, LPWSTR总结
- TCHAR char wchar_t 的区别
- 从char/wchar_t到TCHAR
- char、wchar_t、ACHAR、WCHAR、TCHAR
- 从char/wchar_t到TCHAR
- 关于学习Linux的经典书籍 (深入理解Linux内核、Linux设备驱动程序等)
- amplxe-cl -finalize:用的不多.
- 面向对象的设计原则-类设计原则
- MyGUI 功能与架构
- vtune import:用的不多.
- char, wchar_t, TCHAR 字符全总结 & c++字符串操作经验集
- vtune report
- 获取iOS设备的内存状况
- Oracle体系结构及启动和关闭
- 对于Hibernate的一些总结
- 动态规划 - 装配线调度问题
- MFC中创建了一个类,在classview中找不到了。
- jfreechart 饼形图
- tabhost的主activity和各个页面之间如何通讯?