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; } |