十六进制转换为十进制和二进制转换为十进制还有其它进制对十进制的转换,方法几乎都是一样的。这里只是两个简单的实现,并没有考虑小数位情况。另外十进制转换为其它进制的实现在另一篇文章itoa()函数的实现中有介绍。
整个过程很简单,一次遍历加判断
//十六进制转化为十进制
int parseHex(const char *const hexString)
{
assert(hexString != NULL);
long long result = 0;
for(int i=0; *(hexString + i) != '\0'; i++)
{
if(*(hexString + i) <= '9' && *(hexString + i) >= '0')
{
result = result * 16 + *(hexString + i) - '0';
}
else if(*(hexString + i) >= 'A' && *(hexString + i) <= 'F')
{
result = result * 16 + 10 + *(hexString + i) - 'A';
}
else
{
cout<<"Wrong input!"<<endl;
return 0;
}
if(result > 0xFFFFFFFF)
{
cout<<"Beyond the range of int "<<endl;
return 0;
}
}
return result;
}
//二进制字符串转化为十进制
int parseBinary(const char * const binaryString)
{
assert(binaryString != NULL);
long long result = 0;
for(int i=0; *(binaryString + i) != '\0'; i++)
{
if(*(binaryString + i) == '0' || *(binaryString + i) == '1')
{
result = result * 2 + *(binaryString + i) - '0';
}
else
{
cout<<"Wrong input!"<<endl;
return 0;
}
if(result > 0xFFFFFFFF)
{
cout<<"Beyond the range of int"<<endl;
return 0;
}
}
return result;
}