10. 編碼:寫一個c函數,實現將16進製表現形式的字符串轉化爲整數。例如,輸入”1a”,返回26,輸入“FE”,返回254

#include <assert.h>
#include<iostream>
using namespace  std;

// 返回字符串的長度, 不包括最後\0
int string_len(const char *s)
{
    const char *p = s;
    while(*p != '\0')
        p++;
    return p - s;

}

int HexChar2Value(char c)
{
    // 如果字符是數字
    if (c > '0' && c <= '9')
        return c -'0';   
    else if (c >='a' && c <='f')
        return (c -'a' +10);
    else if(c >='A' && c <='F')
        return (c -'A' + 10);
    assert(0);                    //如果輸入都不符合條件,提示錯誤,終止程序
    //cout << c <<endl;
    //cout<< (int) 'a' <<endl;
    return  0;
}

int hex_to_decimal(const char *szHex)
{
    int i;
    int result;             // 存放結果
    int len;                //字符串長度,不包括\0
    int value;            //保存字符串轉化爲整形的數值
    result = 0;        

    len = string_len(szHex);   //獲取字符串長度

    for(i =0; i < len ;i++)
    {
          value = HexChar2Value(szHex[i]);                   //字符串轉化爲整形數值
            result += pow((double) 16, (int)len -i -1) * value;       //從最高位開始計算
    }
    return result;
}

int main()
{
    int result;
     result = hex_to_decimal("f1");    //輸入一個字符串 0x1001, 返回一個int數
     cout << result <<endl;
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章