Determines whether a particular character is an ASCII character.
int __isascii(
int c
);
int iswascii(
wint_t c
);
测试程序:
&emspinclude "stdafx.h"
&emspinclude "ctype.h"
&emspinclude "locale.h"
&emspinclude "stdio.h"
void CheckCharAndPrint(char acChar)
{
if(__isascii(acChar))
{
printf("char %c is a ascii char.\n",acChar);
}
else
{
此处无法正常输出中文,没有深入研究了
printf("char %c is not a ascii char.\n",acChar);
}
}
void CheckWCharAndPrint(wchar_t awcChar)
{
if(iswascii(awcChar))
{
wprintf(L"wchar %c is a ascii char.\n",awcChar);
}
else
{
setlocale(LC_ALL,"");
wprintf(L"wchar %c is not a ascii char.\n",awcChar);
}
}
int _tmain(int argc, _TCHAR* ar[])
{
char lcC = 'a';
char lcD = '中';
CheckCharAndPrint(lcC);
CheckCharAndPrint(lcD);
wchar_t lwcC = L'a';
wchar_t lwcD = L'中';
CheckWCharAndPrint(lwcC);
CheckWCharAndPrint(lwcD);
return 0;
}
说明:
__isascii是一个比较特殊的函数,因为它以两个前置下划线开头。
这在C语言中并不多见。(起码我看到的比较少)
此函数应该不属于标准库函数,《TCPL》中,《C语言参考》中并没有描述,但是gcc中有此函数。也就是说linux下也能正常使用此函数。
iswascii这个__isascii函数的宽字节版本,如同很多宽字节版本的函数一样,这个函数属于MS自己扩的,于是。。linux下无法使用此函数,要使用,只能自己实现罗。
实现:
MS:
&emspdefine __isascii(_Char) ( (unsigned)(_Char)< 0x80 )
inline int __cdecl iswascii(wint_t _C) {return ((unsigned)(_C)< 0x80); }
gcc:
&emspdefine __isascii(c) (((c)
void CheckMS(char ac)
{
double ldTimeLast = jtianling::GetTime();
for (int i=0; i