/*
編寫函數htoi(s),把由16進制數字組成的字符串(包含可選的前綴0x或0X)轉換成與之等價的整型值.
字符串中允許包含的數字包括:0~9,a~f,A~F.
*/
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int htoi(char *head)
{
int number=0,bit=0;
char *s=head;
if(head==NULL)exit(-1);
while(*s !='/0')s++;
s--;/*s指向最後一個字符*/
while( s!=head )
{//bit ,s
if(*s>='0'&&*s<='9'){
number+=((*s-'0')*(signed int)pow(16,bit));
s--;bit++;
continue;}
if(*s>='a'&&*s<='f'){
number+=((*s-'a'+10)*(signed int)pow(16,bit));
s--;bit++;
continue;}
if(*s>='A'&&*s<='F'){
number+=((*s-'A'+10)*(signed int)pow(16,bit));
s--;bit++;
continue;}
break;
}
if(*s=='x' ||*s=='X'){
s--;
if(*s=='0' && s==head)
return number;
else return -1;
}
if( s==head)return number;
return -1;
}
int main(void)
{
char *a="0x";
int b=htoi(a);
printf("b=%d/n",b);
return 0;
}