16进制字符串转化为10进制数
同學在MSN CDC電話面試(可惜我在被面試的時候全然沒有這么具體的問題了:))中的一個題目:將16進制的字符串轉化為10進制數字,例如“1A”,則對應26。題目很簡單,實現起來也容易,依稀記得C里面有函數可以轉化。剛好很久前有一個工作了的同學問起,自是給了一個方案。昨晚(050703)實在無聊,于是本著“寫過才是自己的原則”,寫了一個實現,其中對于16進制字符串非法的處理不是很好(返回-1),但是已經不想改了。(自己寫的時候才知道原來Horner法則的實現都生疏了不少,思及最近多在模式、架構和軟件過程、文檔上花時間(項目使然,也沒有辦法:)),實在不能忘本了。)
????? 參考代碼如下:
| //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; } |
總結
以上是生活随笔為你收集整理的16进制字符串转化为10进制数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全系6GB!iPhone 14系列配置曝
- 下一篇: java se好用吗_利用 Java S