# Binär in Hex umwandeln



## Demenkay (13. Nov 2011)

Ich muss Hexadezimal in Dezimalzahlen umwandeln und andersrum. 
Den Code für Dez in Hex habe ich, jetzt dachte ich dass es wohl kein so großes Problem sein kann es andersrum auch zu schreiben, war wohl nicht so...


```
import java.util.Scanner;

public class Aufgabe41 {
	public static void main(String[] args) {
		int x;
		String[] hex = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A",
				"B", "C", "D", "E", "F" };
		String[] bin = { "0000", "0001", "0010", "0011", "0100", "0101",
				"0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101",
				"1110", "1111" };

		Scanner s = new Scanner(System.in);
		System.out.println("Geben Sie eine Hexadezimalzahl ein : ");
		String eingabe = s.next();
		String ergebnis= "";
		
		x = eingabe.length()%4;
		switch (x){
		
		case 0:
			eingabe = eingabe;
			break;
		case 1:
			eingabe = "000" + eingabe;
			break;
		case 2:
			eingabe = "00" + eingabe;
			break;
		case 3:
			eingabe = "0" + eingabe;
			break;
		}
		for (int i = 4; i < eingabe.length(); i= i+4) {
			char temp = eingabe.charAt(i);
			String temp2 = "" + temp + "";
			for (int j = 0; j < bin.length; j++) {
				if (temp2.equalsIgnoreCase(bin[j])) {
					ergebnis= ergebnis+ hex[j];
				}
			}
		}
		System.out.println("In binär : " + ergebnis);
	}
}
```

Meine erste for Schleife ist falsch, allerdings habe ich kein Ahnung wie ich es schreiben sollte. Ich habe oben mit 0en aufgefüllt, damit ich immer 4er Pakete habe zum umformen, allerdings weiß ich nicht, wie ich einen String mit 4 Zeichen in meine char temp bekommen kann!
Wäre klasse wenn jemand mit helfen könnte!


----------



## Camill (13. Nov 2011)

Demenkay hat gesagt.:


> Ich muss Hexadezimal in Dezimalzahlen umwandeln und andersrum.
> Den Code für Dez in Hex habe ich, jetzt dachte ich dass es wohl kein so großes Problem sein kann es andersrum auch zu schreiben, war wohl nicht so...



Hexadezimal in Dezimal oder Hexadezimal in Binär?


----------



## Demenkay (13. Nov 2011)

Hexadezimal in Binär natürlich, sorry!!!


----------



## Camill (13. Nov 2011)

Verstehe nicht genau was durch die switch und for Konstruktion erreicht werden soll. Kennst du dich mit einer HashMap aus, darfst du so etwas benutzen?


----------



## Demenkay (14. Nov 2011)

Also das ist meine Umformung von hex in binär:


```
import java.util.Scanner;

public class Aufgabe4 {
	public static void main(String[] args) {
		String[] hex = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A",
				"B", "C", "D", "E", "F" };
		String[] bin = { "0000", "0001", "0010", "0011", "0100", "0101",
				"0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101",
				"1110", "1111" };

		Scanner s = new Scanner(System.in);
		System.out.println("Geben Sie eine Hexadezimalzahl ein : ");
		String eingabe = s.next();
		String ergebnis = "";
		for (int i = 0; i < eingabe.length(); i++) {
			char temp = eingabe.charAt(i);
			String temp2 = "" + temp + "";
			for (int j = 0; j < hex.length; j++) {
				if (temp2.equalsIgnoreCase(hex[j])) {
					ergebnis = ergebnis + bin[j];
				}
			}
		}
		System.out.println("In binär : " + ergebnis);
	}
}
```

Ich dachte mir jetzt ich kann die einfach umformen, damit ich von binär in hex komme! Aber ist wohl nicht der Fall...


----------



## Michael... (14. Nov 2011)

Prinzipiell kann man die Wandlung von bin in hex genauso umsetzen. Man muss nur statt einzelne Zeichen zu vergleichen diesesmal immer eine Gruppe von vier Zeichen aus der Eingabe "trennen" und diese vergleichen. Falls die Länge der Eingabe nicht ein vielfaches von vier ist, kann man diese um die entsprechende Anzahl führender 0en ergänzen.


----------



## Demenkay (14. Nov 2011)

Ja ich habe ja im oberen Fall mit switch/case schon ergänzt, wenn die Pakete nicht aus 4 Ziffern bestehen, mein Problem ist aber nun, wie ich die 4 Pakete benutze, bzw, die Trennung hinbekomme, dass er 4 nach der erweiterung mit 0en die 4er Pakete macht...


----------



## Michael... (14. Nov 2011)

Da Du charAt(int) schon kennst könntest Du Dir die Teilstrings damit zusammensetzen.
Allerdings bietet die Klasse String auch noch die Methode substring(int, int), um direkt komplette Teilabschnitte eines Strings "herauszulösen"


----------



## Demenkay (14. Nov 2011)

Cool, vielen Dank!! Ich hab es jetzt mit substring geschrieben und es sieht folgendermaßen aus:


```
import java.util.Scanner;

public class Aufgabe41 {
	public static void main(String[] args) {
		int x;
		String[] hex = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A",
				"B", "C", "D", "E", "F" };
		String[] bin = { "0000", "0001", "0010", "0011", "0100", "0101",
				"0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101",
				"1110", "1111" };

		Scanner s = new Scanner(System.in);
		System.out.println("Geben Sie eine Binärzahl ein : ");
		String eingabe = s.next();
		String ergebnis = "";
		
		x = eingabe.length()%4;
		switch (x){
		
		case 0:
			eingabe = eingabe;
			break;
		case 1:
			eingabe = "000" + eingabe;
			break;
		case 2:
			eingabe = "00" + eingabe;
			break;
		case 3:
			eingabe = "0" + eingabe;
			break;
		}
		
		
		for (int i = 4; i <= eingabe.length(); i= i+4) {
			String temp = eingabe.substring(i-4, i);
			String temp2 = "" + temp + "";
			for (int j = 0; j < bin.length; j++) {
				if (temp2.equalsIgnoreCase(bin[j])) {
					ergebnis = ergebnis + hex[j];
				}
			}
		}
		System.out.println("In hexa : " + ergebnis);
	}

}
```

Es funktioniert und passt auch alles. Meine Frage ist jetzt nur: Ist es wirklich richtig, wenn man die 0en VOR der binären Zahl auffüllt? Wenn ich ne 001010011 eingebe und ne 2 meine, dann füllt er ja mit 0 auf und ich bekomme 053 raus, wenn ich richtig liege, oder?


----------



## Michael... (14. Nov 2011)

Demenkay hat gesagt.:


> Ist es wirklich richtig, wenn man die 0en VOR der binären Zahl auffüllt? Wenn ich ne 001010011 eingebe und ne 2 meine, dann füllt er ja mit 0 auf und ich bekomme 053 raus, wenn ich richtig liege, oder?


Was soll daran falsch sein? Das mit "ne 2 meine" verstehe ich nicht ganz. Wenn Dich führende 0en im Ergebnis stören, kannst Du ja die Eingabe bereits auf führende 0en prüfen und die Eingabe auf die passende Länge erweitern oder verkürzen. Oder Du prüfst das Ergebnis und entfernst dort evtl. führende 0en.


Demenkay hat gesagt.:


> Cool, vielen Dank!! Ich hab es jetzt mit substring geschrieben und es sieht folgendermaßen aus:
> 
> Das Auffüllen mit führenden 0en könnte man mit einer Schleife etwas eleganter lösen.
> Die Erzeugung von
> ...


----------

