int Uart_GetIntNum(void) { char str[30]; char *string=str; int base=10; int minus=0; int lastIndex; int result=0; int i; Uart_GetString(string); if(string[0]=='-') { minus=1; string++; } if(string[0]=='0' && (string[1]=='x' || string[1]=='X')) { base=16; string+=2; } lastIndex=strlen(string)-1; if( string[lastIndex]=='h' || string[lastIndex]=='H' ) { base=16; string[lastIndex]=0; lastIndex--; }
if(base==10) { result=atoi(string); result=minus ? (-1*result):result; } else { for(i=0;i<=lastIndex;i++) { if(isalpha(string)) { if(isupper(string)) result=(result<<4)+string-'A'+10; else result=(result<<4)+string-'a'+10; } else { result=(result<<4)+string-'0'; } } result=minus ? (-1*result):result; } return result; }
就是这个程序,刚学习ARM,在超级中端上执行这个程序时result值总是输出不正确,比如输入0xa和0xA应该输出一样的值,但总是不一样。是不是程序中有问题?比如那个语句result=(result<<4)+string-'A'+10;既然result是整型数,为什么还要左移四位呢?小弟愚钝,望高手们回复指教!!!
|