2016-09-04 4 views
1

ビット文字列の結果を16進文字列に変換しようとしていますが、何も印刷しません。言い換えれば、000110011101は "19d"を印刷する必要があります。私の一時変数は問題ですか?どのような援助のため、事前に私のビットストリングが16進数のストリングコードで結果を印刷しないのはなぜですか?

おかげで、これは私のコードです:

public static void BinaryToHex() { 
     Scanner scanner = new Scanner(System.in); 
     String bitString = ""; 
     String hexString = ""; 

    String[] hex = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", 
      "D", "E", "F" }; 
    String[] binary = { "0000", "0001", "0010", "0011", "0100", "0101", "0110", 
      "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111" }; 

    System.out.println("Enter a bit string: "); 
    bitString = scanner.next(); 

    for (int i = 0; i < bitString.length(); i++) { 
     char temp = bitString.charAt(i); 
     String temp2 = "" + temp + ""; 
     for (int j = 0; j < binary.length; j++) { 
      if (temp2.equalsIgnoreCase(binary[j])) { 
       hexString = hexString + hex[j]; 
      } 
     } 
    } 

    System.out.print("The equivalent hex string is "); 
    System.out.println(hexString); 
} 
+1

'のSystem.out.println(持つInteger.toString(Integer.parseInt( "000110011101"、2)、16));' –

答えて

4
for (int i = 0; i < bitString.length(); i++) { 
     char temp = bitString.charAt(i); 
     String temp2 = "" + temp + ""; 
     for (int j = 0; j < binary.length; j++) { 
      if (temp2.equalsIgnoreCase(binary[j])) { 
       hexString = hexString + hex[j]; 
      } 
     } 
    } 

。だから基本的には長さ要素と1長さ要素を比較しようとしていますが、これは決して真実ではありません。

したがって、HexStringは決して変更されず、初期化したのと同じように印刷されます。コードの実行中は何も表示されません。

4の長さの部分文字列をtemp2に格納してtemp2に格納すると、4ビットごとにHexCharacterが存在するため、1ビット数を2進数にすることはできません。

ロジックごとにbitString length4の倍数である必要があります。そうしないと、hexの配列に対応する16進数文字が与えられません。

コード内のforループをこれに置き換えます。

if(bitString.length()%4!=0) 
    System.out.println("Please Enter Valid Input."); 
else 
{ 
    for (int i = 0; i < bitString.length()/4; i++) 
    { 
     String temp2 = bitString.substring(4*i,4*(i+1)); 
     for (int j = 0; j < binary.length; j++) 
      { 
      if (temp2.equalsIgnoreCase(binary[j])) 
       { 
       hexString = hexString + hex[j]; 
      } 
     } 
    } 
    System.out.print("The equivalent hex string is "); 
    System.out.println(hexString); 
} 
+0

非常に有用であなたに – Peanutcalota

+0

何の問題に感謝していないが、任意の長さでこれをやろう入力文字列。それはあなたの脳にいくつかの運動を与えるでしょう。 :) –

+0

良いアイデア! :D。 – Peanutcalota

1

あなたtemp2文字列が入力文字列のchar Sをループforループの外側、内側の再定義されているすべての時間です。つまり、temp2には実際には1つ以上のシンボルが含まれていることはなく(ループの繰り返しごとにリセットされるため)、binary配列内の文字列と決して等しくなることはありません。

temp2文字列を最初にループの外側にString temp2 = ""として定義し、そのループの内側にtempを追加します。あなたが一度にビット列の1つの文字を取り、長さ4のすべての入力を持つバイナリ[]配列の入力と比較しようとしている。このループでは

関連する問題