三九宝宝网宝宝百科宝宝知识

CRunTimeLibrary函数isascii&iswascii&toascii

11月11日 编辑 39baobao.com

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

推荐阅读
图文推荐