Hexa in String < Java < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 01:17 Do 20.01.2011 | Autor: | Fatih17 |
Hallo,
ich habe vor eine Mathode zu schreiben, die Hexa in Strings umwandelt.
Ich bin schon soweit, dass er z.B. 61 umwandelt, jedoch schafft er irgendwie ein "hallo" (68616c6c6f) nicht, dann kommt ein Fehler:
"AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "68616c6c6f"
Er hat wohl Probleme in folgender Zeile, wo ich den Text, den er aus der Datei liest umwandle:
[CODE]
String h=HextoString(Long.parseLong(br.readLine()));
[/CODE]
Hier meine Methode:
[CODE]
public String HextoString(long str ) throws IOException {
StringBuffer sb = new StringBuffer();
String[] arr = new String[] { String.valueOf(str)};
for (String a : arr ) {
long c = Long.parseLong(a,16);
char chr = (char)c;
sb.append(chr);
}
return sb.toString();
}
[/CODE]
Vielen Danke im voraus
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 01:55 Do 20.01.2011 | Autor: | felixf |
Moin!
> ich habe vor eine Mathode zu schreiben, die Hexa in Strings
> umwandelt.
>
> Ich bin schon soweit, dass er z.B. 61 umwandelt, jedoch
> schafft er irgendwie ein "hallo" (68616c6c6f) nicht, dann
> kommt ein Fehler:
>
> "AWT-EventQueue-0" java.lang.NumberFormatException: For
> input string: "68616c6c6f"
>
> Er hat wohl Probleme in folgender Zeile, wo ich den Text,
> den er aus der Datei liest umwandle:
>
> [CODE]
> String h=HextoString(Long.parseLong(br.readLine()));
> [/CODE]
Kein Wunder, dass es einen Fehler gibt: Long.parseLong() erwartet eine Dezimalzahl. Du musst schon die Basis 16 angeben, wenn du eine Hexadezimalzahl einlesen willst (siehe hier).
Das ganze hat aber noch ein weiteres Problem: ein long kann nicht beliebig gross sein. Entweder verwendest du BigInt, oder du interpretierst den String selber. (Zweiteres ist eleganter.)
LG Felix
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 11:33 Do 20.01.2011 | Autor: | Fatih17 |
Hallo,
danke für die Antwort, jetzt bekomme ich keine Fehlermeldung mehr, aber dafür ein chinesiches Zeichen, warum?
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 14:18 Do 20.01.2011 | Autor: | felixf |
Moin,
> danke für die Antwort, jetzt bekomme ich keine
> Fehlermeldung mehr, aber dafür ein chinesiches Zeichen,
> warum?
na, dann musst du dein Programm mal etwas debuggen. Gib doch in der for-Schleife immer das c aus (jeweils in einer Zeile). Dann siehst du, welche Unicode-Zeichen da aneinandergehaengt werden. Und du siehst vermutlich auch schnell, wo das Problem liegt bei deinem Programm.
LG Felix
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 15:39 Do 20.01.2011 | Autor: | Fatih17 |
Hmm ich glaube es liegt daran, dass er das ganze als auf einmal übersetzen will und nicht. Ich müsste glaube ich dann den String aufteilen in immer 2 Zeichen damit er das übersetzen kann.
Leider bin ich noch Anfänger und weiß nicht wie ich das genau mache :(
|
|
|
|
|
Du kannst in einem String auf ein spezielles Zeichen zugreifen indem du die Methode: String.charAt(int i); verwendest.
Damit kannst du, bei deinem Beispiel, mit
c.charAt(1); auf den ersten Buchstaben zugreifen.
c.charAt(2); dementsprechend auf den Zweiten.
Ich glaube das kann dir enorm helfen.
Grüße André
|
|
|
|
|
Status: |
(Frage) reagiert/warte auf Reaktion | Datum: | 17:50 Do 20.01.2011 | Autor: | Fatih17 |
Ich habe ir jetzt mal sowas gebastelt aber das funktioniert nicht :(
Irgendwie kriege ich es nicht auf die Reihe:
[CODE]
public String hexToString(String str ) throws IOException {
int[] arr = new int[] { Integer.parseInt(str)};
StringBuffer sb = new StringBuffer("");
for (int i = 0; i < arr.length; i++) {
Integer e = Integer.parseInt( String.valueOf((int) arr[i]),16);
sb.append(e);
}
return sb.toString();
}
[/CODE]
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 19:06 Do 20.01.2011 | Autor: | Fatih17 |
Habs geschafft hat isch erledigt, vielen Dank an euch :)
|
|
|
|