16进制字符串转化为10进制数
k_eckel:http://www.mscenter.edu.cn/blog/k_eckel
同学在MSN CDC电话面试(可惜我在被面试的时候全然没有这么具体的问题了:))中的一个题目:将16进制的字符串转化为10进制数字,例如“
参考代码如下:
|
//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; } |