2016-12-31 19 views
0
#include <string> 
#include <iostream> 

using namespace std; 

int main() { 
    string input, numBin = ""; 
    cout << "Enter a hexadecimal number: "; 
    getline(cin, input); 

    for (int i = 0; i < input.length(); i++) { 
     switch (input[i]) { 
      case 0: numBin.append("0000"); break; 
      case 1: numBin.append("0001"); break; 
      case 2: numBin.append("0010"); break; 
      case 3: numBin.append("0011"); break; 
      case 4: numBin.append("0100"); break; 
      case 5: numBin.append("0101"); break; 
      case 6: numBin.append("0110"); break; 
      case 7: numBin.append("0111"); break; 
      case 8: numBin.append("1000"); break; 
      case 9: numBin.append("1001"); break; 
      case 'a': numBin.append("1010"); break; 
      case 'A': numBin.append("1010"); break; 
      case 'b': numBin.append("1011"); break; 
      case 'B': numBin.append("1011"); break; 
      case 'c': numBin.append("1100"); break; 
      case 'C': numBin.append("1100"); break; 
      case 'd': numBin.append("1101"); break; 
      case 'D': numBin.append("1101"); break; 
      case 'e': numBin.append("1110"); break; 
      case 'E': numBin.append("1110"); break; 
      case 'f': numBin.append("1111"); break; 
      case 'F': numBin.append("1111"); break; 
      default: break; 
     } 
    } 
    cout << "Your number in binary is " << numBin << "."; 
} 

このプログラムは、16進数入力( 'input')をバイナリ結果( 'numBin')に変更することになっています。私はswitch文を使った経験はあまりなく、 "default"の事例を完全に理解していないので、それについての明確化や誤った使い方が役に立つでしょう!混乱C++で16進数を2進数に変換する

私は取得していますエラーがループのためにあり、それはthorws:符号付きおよび符号なし整数式との比較[-Wsign-比較]

答えて

2
case '0': 
case '1': 
... 

使用するすべてのcharacters..not番号と文字。ラインでfor(i=0;i<(int) input.length();i++)

2

そして、もう一つの鉱石の事..:

for (int i = 0; i < input.length(); i++) ... 

input.length()は符号なしのタイプですsize_tを返します。 、 A warning - comparison between signed and unsigned integer expressions

をそれを修正するには、単純に変更します。 (http://www.cplusplus.com/reference/string/string/length/を参照)

は、符号付きと符号なしの値を比較するには、他の多くの間、この記事でそれについての詳細を読んで、コンパイラは警告を出し理由である、安全ではありません

unsigned int i = 0 

他のケースと一致しない場合、デフォルトのスイッチケースが実行されます。たとえば、間違った入力を処理するコードをいくつか入れてください。