本文转自如下网址:http://www.cnblogs.com/blessw/archive/2010/02/01/1661362.html
//main.cpp
#include <iostream>
using namespace std;
int StrToNum16(const char* str);
int Char16ToInt(char c);
bool IsValidateStr16(const char* str);
int main(int argc,char* argv[])
{
#ifdef _DEBUG
char* str = "78AB";
long i = StrToNum16(str);
cout<<str<<" : "<<i<<endl;
#else
cout<<"No test case...."<<endl;
#endif
return 0;
}
int StrToNum16(const char* str)
{
if (!IsValidateStr16(str))
{
cout<<"Invalidate Num str....."<<endl;
return -1;
}
int len = strlen(str);
int num = 0;
for (int i = 0;i < len;i++)
{
num = num*16 + Char16ToInt(str[i]);
}
return num;
}
int Char16ToInt(char c)
{
switch (c)
{
case '0':
return 0;
break;
case '1':
return 1;
break;
case '2':
return 2;
break;
case '3':
return 3;
break;
case '4':
return 4;
break;
case '5':
return 5;
break;
case '6':
return 6;
break;
case '7':
return 7;
break;
case '8':
return 8;
break;
case '9':
return 9;
break;
case 'A':
return 10;
break;
case 'B':
return 11;
break;
case 'C':
return 12;
break;
case 'D':
return 13;
break;
case 'E':
return 14;
break;
case 'F':
return 15;
break;
default:
return 0;
break;
}
}
bool IsValidateStr16(const char* str)
{
if (NULL == str)
{
return false;
}
int len = strlen(str);
for (int i = 0;i < len;i++)
{
if (!(((str[i] >= '0') && (str[i] <= '9'))
|| ((str[i] >= 'A') && (str[i] <= 'F'))))
return false;
}
return true;
}