Ich versuche einen binären String in einen Integer umzuwandeln.
Mein ursprünglicher binärer String ist 32+ Zeichen lang. Also zerlege ich ihn in Zeichenketten bestehend aus 32 Zeichen um ihn in meinem Beispiel in Dezimalzahlen umzuwandeln, das funktioniert aber irgendwie nicht... ich bekomme immer folgenden Fehler:
Java:
Binär-String:10100101001111000100000000110010Exception in thread "main" java.lang.NumberFormatException:For input string:"10100101001111000100000000110010"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:461)
at binarytest.Main.main(Main.java:16)JavaResult:1BUILD SUCCESSFUL (total time:0 seconds)
Warum funktioniert das nicht? Theoretisch sollten 2 Binär-Strings und 2 Dezimal-Zahlen in der Konsole angezeigt werden.
Wäre nett, wenn jemand eine Idee hat
Also ich denke, dass deine Zahl schlicht und ergreifend zu groß ist für ein Integer. Eben genau dann, wenn das Bit an erster Stelle ne 1 ist. Der maximale Wert eines Integers ist (2^31)-1 laut Integer.MAX_VALUE.
publicclassTest{publicstaticvoidmain(String[] args){int k =-2;String st =Integer.toBinaryString(k);System.out.println(st);
k =Integer.parseInt(st,2);// Exception}}
das 32. Bit ist das Vorzeichen, wenn du das so nicht parsen willst, dann besser long-parsen, das geht auch mit 32,
warum Java aber einen solchen Binärstring nicht wieder in einen negativen int parsen kann ist mir ein Rätsel bzw. ein Bug,
falls nicht exakt gewollt (warum? warum kein Hinweis? im Zehner-System ist Minus-Zeichen erlaubt)
warum Java aber einen solchen Binärstring nicht wieder in einen negativen int parsen kann ist mir ein Rätsel bzw. ein Bug,
falls nicht exakt gewollt (warum? warum kein Hinweis? im Zehner-System ist Minus-Zeichen erlaubt)[/QUOTE]Tatsächlich ist das so gewollt.EinMinuszeichen muss man mit '\u002D' vorne anfügen
Jetzt funktioniert alles soweit. Ich speicher die Integers dann in eine Datafile und lade die Integers danach wieder um zu testen, ob alles funktioniert -> und das tut es.
du nimmst jetzt einmal 31 bit und die restlichen möglicherweise 33 Bit in einem weiteren Durchgang?
hast du das wirklich mit 64 bit langen Zahlen getestet?
-----
binStr.substring(0)
ist aus deinem Code wohl nicht zu verdrängen, hier eine kürzere Schreibweise:
binStr
du nimmst jetzt einmal 31 bit und die restlichen möglicherweise 33 Bit in einem weiteren Durchgang?
hast du das wirklich mit 64 bit langen Zahlen getestet?
-----
binStr.substring(0)
ist aus deinem Code wohl nicht zu verdrängen, hier eine kürzere Schreibweise:
binStr