2016-09-04 5 views
1

J'essaie d'imprimer le résultat d'une chaîne de caractères en chaîne hexadécimale, mais cela n'imprime rien. En d'autres termes 000110011101 devrait imprimer "19d" sont mes variables temporaires le problème?Pourquoi le code String String to Hex String n'est-il pas imprimé?

Merci à l'avance pour toute aide, voici mon code:

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));' –

Répondre

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]; 
      } 
     } 
    } 

Dans cette boucle que vous essayez de prendre un caractère d'un BITSTRING à la fois et le comparer avec l'entrée de tableau binaire [] qui a toutes les entrées de la longueur 4. Donc, fondamentalement, vous essayez de comparer 1 élément de longueur avec 4 élément de longueur qui ne va jamais être vrai.

Par conséquent, HexString ne sera jamais modifié et il affichera la même chose que vous l'avez initialisé. Ainsi, vous n'obtenez rien pendant l'exécution du code.

Vous pouvez avoir une sous-chaîne de bitString ayant 4 longueurs et le stocker dans temp2 alors ce code fonctionnera et pour chaque 4 bits il y a un HexCharacter donc vous ne pouvez pas faire un nombre de 1 bit en nombre binaire. Donc selon votre logique, bitString length devrait être de multiples de 4 sinon il ne donnera pas le caractère hexadécimal correspondant de hex tableau.

Remplacez la boucle for de votre code par ceci.

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

très utile merci – Peanutcalota

+0

Pas de problème, mais essayez de le faire avec une longueur de Chaîne d'entrée Cela donnera de l'exercice à votre cerveau. :) –

+0

Bonne idée! :RÉ . – Peanutcalota

1

Votre temp2 chaîne est redéfinie à chaque fois à l'intérieur du extérieur pour boucle, qui fait une boucle à travers les char s de la chaîne d'entrée. Cela signifie que temp2 ne contient jamais plus d'un seul symbole (car il est réinitialisé à chaque itération de la boucle), et ne peut donc jamais égaler aucune des chaînes du tableau binary.

Vous devez définir la chaîne temp2 une première fois en tant que String temp2 = "" en dehors de la boucle, puis à l'intérieur de la boucle, ajouter temp.