16进制字符串转化为10进制数
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; } |