常用的宽字符函数
由于Windows
NT/2000/XP采用的是Unicode字符编码,字符都是双字节的。所以在MFC编程中,一般需要使用双字节的字符类型wchar_t和对应的字符串及其指针类型LPCWSTR和LPCTSTR,并在常数字符串前添加了L转换符,串长计算函数不能用strlen而改用wcslen,串格式打印函数也不能用sprintf,而是改用swprintf。
wchar_t类型,在标准C++中为内置的数据类型和关键字;在C99标准中则为typedef类型,其等价的数据类型与具体的实现有关,在Win32和VC中定义为:
typedef unsigned short wchar_t;
下面是若干常用的宽字符函数(包含在ISO C99 / ISO C++的标准库中):
#include
size_t wcslen(const wchar_t *s);
int wprintf(const wchar_t * restrict format, ...);
int wscanf(const wchar_t * restrict format, ...);
int swprintf(wchar_t * restrict s, size_t n, const wchar_t *
restrict format, ...);
int swscanf(const wchar_t * restrict s, const wchar_t * restrict
format, ...);
long int wcstol(const wchar_t * restrict nptr, wchar_t ** restrict
endptr, int base);
float wcstof(const wchar_t * restrict nptr, wchar_t ** restrict
endptr);
double wcstod(const wchar_t * restrict nptr, wchar_t ** restrict
endptr);
#include
errno_t _itow_s( int value, wchar_t *buffer, size_t
sizeInCharacters, int radix ); errno_t _ultow_s( unsigned long value, wchar_t *str, size_t
sizeOfstr, int radix );
多字节-multibyte
宽字符-widechar
非英语系的大部分语言,存在无法用有限的ascii字符表达的问题。
由此产生了使用多字节字符来表示的办法,比如GB编码的汉字。但多字节带来的一个显著不便就是多字节字符在处理的时候不太方便。比如文本编辑的时候,中英文混排,光标移动、汉字删除时会出现半个汉字的问题。
为了文本处理的方便,许多系统内部采用了将多字节字符和单字节字符都转换称宽字符的办法,将所有的字符都变成等宽,一切都方便了。
这就是说英文字符也可以采用宽字符的表达方式。也是我说上面的说发不够准确的原因。
但宽字符也不是完美的。最简单的问题就是使得采用unicode编码的英文文本体积会扩大一倍....:)
宽字符处理函数函数与普通函数对照表
只要看见“W”就是宽的意思,左边wchar_t,右边char
字符分类: 宽字符函数 普通C函数 描述 iswalnum() isalnum() 测试字符是否为数字或字母 iswalpha() isalpha() 测试字符是否是字母 iswcntrl() iscntrl() 测试字符是否是控制符 iswdigit() isdigit() 测试字符是否为数字 iswgraph() isgraph() 测试字符是否是可见字符 iswlower() islower() 测试字符是否是小写字符 iswprint() isprint() 测试字符是否是可打印字符 iswpunct() ispunct()