Während ein Spiel für J2ME Schreiben liefen wir in ein Problem java.lang.Integer.parseInt mit()Ist J2ME's Integer.parseInt() gebrochen?
Wir haben mehrere konstante Werte als Hex-Werte definiert, zum Beispiel:
CHARACTER_RED = 0xFFAAA005;
Während des Spiels Der Wert wird serialisiert und über eine Netzwerkverbindung empfangen, die als Zeichenfolgendarstellung des Hexadezimalwerts angezeigt wird. Um es in einen int zu analysieren zurück wir versuchen unsuccesfully folgend:
// Response contains the value "ffAAA005" for "characterId"
string hexValue = response.get("characterId");
// The following throws a NumberFormatException
int value = Integer.parseInt(hexValue, 16);
Dann lief ich ein paar Tests und versuchte, dies:
string hexValue = Integer.toHexString(0xFFAAA005);
// The following throws a NumberFormatException
int value = Integer.parseInt(hexValue, 16);
Dies ist die Ausnahme von dem eigentlichen Code:
java.lang.NumberFormatException: ffaaa005
at java.lang.Integer.parseInt(Integer.java:462)
at net.triadgames.acertijo.GameMIDlet.startMIDlet(GameMIDlet.java:109)
Das muss ich zugeben, verblüfft mich. Wenn man den parseInt-Code betrachtet, scheint die NumberFormatException ausgelöst zu werden, wenn die zu analysierende Zahl die "negative/positive Grenze" überschreitet (vielleicht kann jemand dafür im rechten Jargon editieren).
Ist dies das erwartete Verhalten für die Integer.parseInt-Funktion? Am Ende musste ich meine eigene Hex-String-Parsing-Funktion schreiben, und ich war ziemlich unzufrieden mit der bereitgestellten Implementierung.
Mit anderen Worten, war meine Erwartung von Integer.parseInt() Arbeit an der Hex String-Darstellung einer ganzen Zahl fehlgeleitet?
EDIT: In meiner ersten Veröffentlichung schrieb ich 0xFFFAAA005 anstelle von 0xFFAAA005. Seitdem habe ich diesen Fehler korrigiert.
Es ist eine schlechte Idee anzunehmen, dass das von Ihnen verwendete weit verbreitete Tool einen so grundlegenden Fehler hat. Wann immer Sie versucht sind, davon auszugehen, sollten Sie doppelt und dreifach prüfen, ob Sie alles richtig machen. –
Ich bekomme die Downvotes nicht wirklich. Es war eine gut geschriebene Frage. –
+1 Ich bin nicht sicher, warum dies abgelehnt wurde - es ist eine legitime Frage. –