2017-02-28 13 views
1

文字にswitchコマンドを使用して10進文字列を16進数に変換するプログラムを作成しましたが、charを使用するとプログラムがうまく動作しません。 スイッチがなければ、私は9を超える数字を扱うことはできません。私の言葉はそれほど良くないので、私が理解したことを願っています。10進数から16進数に変換する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;' ==> '[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';の代わりに置くの[i]がまだないので、条件と[i]は上のスイッチケースでは、あなたは、トンの16%の上に置く必要がある場合セット。それは正常に動作するはずです。

編集: 数字から文字定数への会話がどのように機能するのかを理解するには、文字が内部的にどのように表現されているかを理解する必要があります。

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

私は精緻化します、提案に感謝します。 –

関連する問題