2017-02-28 196 views
1

我編寫了一個程序,通過使用開關命令將十進制字符串轉換爲十六進制字符,但如果使用char,程序不能正常工作! 沒有開關我不能處理9以上的數字..我希望你明白我的意思,因爲我的語言不太好。將十進制轉換爲十六進制的C++程序

所以這是我的計劃

順便說一句,如果把它int,而不是char它做工精細,但它已經成爲11代替B

#include <iostream> 
using namespace std; 
int main() 
{ 
    int n, i, c=0, t; 
    char a[50]; 

    cout << "Enter a decmail number :\n"; 
    cin >> n; 
    t = n; 

    for (i = 0; t > 0; i++) 
    { 
     if (a[i] % 16 > 9) 
     { 
      switch(a[i]) 
      { 
       case 10 : a[i] = 'A'; break; 
       case 11 : a[i] = 'B'; break; 
       case 12 : a[i] = 'C'; break; 
       case 13 : a[i] = 'D'; break; 
       case 14 : a[i] = 'E'; break; 
       case 15 : a[i] = 'F'; break; 
      } 
     } 
     else 
     { 
      a[i] = t % 16; 
     } 
     t = t/16; 
    }  
    cout << n << " In hexdecmail = "; 
    for(c = i - 1; c >= 0; c--) 
    { 
     cout << a[c]; 
    } 
} 
+2

'a [i] = t%16;'==>'a [i] = t%16 +'0';'獲取數字的ascii值。 – mch

+0

既然你把它標記爲C++,你可以使用'std :: hex'操縱器。 –

+0

這已經在這裏解答 - http://stackoverflow.com/questions/3464194/how-can-i-convert-an-integer-to-a-hexadecimal-string-in-c –

回答

4

這裏的問題是,1是不一樣的「1 」。 1是數字1,而'1'是字符常量。要將1轉換爲'1',您必須將數字加上'0'。 所以,你可以改變線 a[i] = t%16;a[i] = t%16 + '0';

而且不是把if條件,並在[I]開關的情況下,你需要把它放在T%16,因爲A [1]還不組。休息它應該工作得很好。

編輯: 要理解從數字到字符常量的對話如何工作,您需要了解字符在內部如何表示。

每個字符如a-z,A-Z,0-9和特殊字符分配一個介於0和256之間的數字。該編號稱爲字符的ASCII值。您可以找到所有ASCII值的列表here

'0'的ASCII值是48.那'1'是49,'2'是50等等。現在你所擁有的是數字(你通過做t%16得到)。說它是3。要轉換爲ASCII碼(51),您必須添加48.同樣,0-9之間的所有數字都可以通過添加48轉換爲它們的ASCII值。這是因爲數字的ASCII值是連續的。

往往是很難記住的ASCII值48,因此,你可以只寫「0」,這意味着內部48.

我希望這有助於。

+0

我會詳細說明,謝謝你的建議。 –

相關問題