C语言wtol函数,char, wchar_t, TCHAR 字符全总结 & c++字符串操作经验集

字符类型、字符指针类型、字符串字面值

字符类型:

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_DEFINED

typedef wchar_t _TCHAR;

typedef wchar_t _TSCHAR;

typedef wchar_t _TUCHAR;

typedef wchar_t _TXCHAR;

#define __TCHAR_DEFINED

#endif

typedef wchar_t TCHAR;

// 非_UNICODE 版

#ifndef __TCHAR_DEFINED

typedef char _TCHAR;

typedef signed char _TSCHAR;

typedef unsigned char _TUCHAR;

typedef char _TXCHAR;

#define __TCHAR_DEFINED

#endif

typedef char TCHAR;

// 字符定义总结如下:

自适应 非UNICODE UNICODE

_TCHAR char wchar_t

_TSCHAR signed char wchar_t

_TUCHAR unsigned char wchar_t

_TXCHAR char wchar_t

TCHAR char 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。

lstra系列: 在windows操作系统的Kernel32.dll中定义,处理CHAR类型的字符串,其实是对lstrw的一层包装。

lstrw系列: 在windows操作系统的Kernel32.dll中定义,处理WCHAR类型的字符串。

lstr系列: lstr系列函数也是在编译时才根据是否预定义了UNICODE宏来确定采用lstra系列函数,还是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

atoi, itoa 字符串转换函数源代码

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值