2013-11-23 113 views
0

我寫的十進制轉換爲十進制數不起作用。我不確定哪部分是錯的。我必須做-7或其他什麼。十進制到十六進制轉換錯誤

int hex_to_dec(char hexnumber[]) 
{ 

int decimal = 0; //integer for the final decimal number 
    int bit; //integer representing numbers between 0-9 and letter a-f in hex number 
    //a char array containing the input hex number 

    int i=0,j=0; 

    //the integer i takes the length of the input array 
    i =strlen(hexnumber); 

    //while there is a next bit in the array 
    while(i!=0) 
    { 
    bit = hexnumber[j]; 

    //if the bit is a digit do the following 
    if(('0' <= bit && bit <= '9')) 
    { 
    decimal = decimal * 16; 
    decimal = decimal + (bit - '0'); 
    } 

    //if the bit is a letter do the following 
    if(('a' <= bit && bit <= 'z')) 
    { 
    decimal = decimal * 16; 
    decimal = decimal + (bit - '7'); 
    } 

    i--; 
    j++; 

    } 
if(('a' <= bit && bit <= 'z')) 
    { 
    decimal = decimal * 16; 
    decimal = decimal + (bit - '7'); 
    } 
    cout<<decimal; 
    return decimal; 
} 

以上是我的代碼相同。

+0

使用調試器。編寫測試。 –

+0

使用標準函數,如'isdigit'和'isalpha',而不是滾動自己的。 – chris

+0

*值減去「0」之後的「值 - 7」技巧適用於「A..F」* - 至少使用ASCII。這表明你從其他地方複製了部分代碼 - 只是不正確。 – usr2564301

回答

2

而不是

decimal = decimal + (bit - '7'); 

嘗試:

decimal = decimal + (bit - 'a' + 10); 

這是因爲在一個base 16位值'a'意味着10base 10一個十進制值。

此外,你應該刪除這個額外的語句,你的while循環之外。

if(('a' <= bit && bit <= 'z')) 
    { 
    decimal = decimal * 16; 
    decimal = decimal + (bit - '7'); 
    } 

爲了容納大寫字母,只需在while循環中添加其他條件即可。

if(('A' <= bit && bit <= 'Z')) 
    { 
    decimal = decimal * 16; 
    decimal = decimal + (bit - 'A' + 10); 
    } 
+0

謝謝abhishek,但它仍然不適用於大寫字母你能幫我解決這個問題。謝謝! –

+0

@VineetJain請看我編輯的答案。 –

+0

我做到了,它給了我所有輸入值的相同答案:/ –

1
int hex2dec(char hexnumber[]) 
{ 
    // get rid of ancient C code (should take a string in the first place most likely) 
    string hex = hexnumber; 

    // use c++ to do the work for us 
    return stoi(hex, nullptr, 16); 
} 
+0

什麼是nullptr? –

+0

@VineetJain簡而言之,它是一種可轉換爲任何指針類型的類型,並代表該指針不指向某個東西。在關鍵字nullptr之前,人們會使用宏NULL或者只是將0置爲0.對於更完整的答案:http://stackoverflow.com/questions/1282295/what-exactly-is-nullptr – user904963