16进制字符串转化为10进制数(k_eckel转自微软高校博客K_eckel\'s mindview)
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; } |