用C语言编写函数htoi(s),把由十六进制组成的字符串(包含可选的前缀0x或0X)转换为与之等价的整型值:
int htoi(const char *s)
{
if( !s )return 0;
if( *s == '0' )
{
s++;
if( *s == 'x' || *s == 'X' )s++;
}
int n = 0;
while( *s )
{
n <<= 4;
if( *s <= '9' )
n |= ( *s & 0xf );
else
n |= ( (*s & 0xf) + 9 );
s++;
}
return n;
}
int main(int argc, char* argv[])
{
printf("%x\n", htoi("0xa"));
printf("%x\n", htoi("0xab"));
printf("%x\n", htoi("0xabc"));
printf("%x\n", htoi("0x0a0b"));
printf("%x\n", htoi("a"));
printf("%x\n", htoi("ab"));
printf("%x\n", htoi("abc"));
printf("%x\n", htoi("12ab"));
return 0;
}
{
if( !s )return 0;
if( *s == '0' )
{
s++;
if( *s == 'x' || *s == 'X' )s++;
}
int n = 0;
while( *s )
{
n <<= 4;
if( *s <= '9' )
n |= ( *s & 0xf );
else
n |= ( (*s & 0xf) + 9 );
s++;
}
return n;
}
int main(int argc, char* argv[])
{
printf("%x\n", htoi("0xa"));
printf("%x\n", htoi("0xab"));
printf("%x\n", htoi("0xabc"));
printf("%x\n", htoi("0x0a0b"));
printf("%x\n", htoi("a"));
printf("%x\n", htoi("ab"));
printf("%x\n", htoi("abc"));
printf("%x\n", htoi("12ab"));
return 0;
}