2017-01-05 2 views
0

Ich erstelle einen Chip-8-Emulator, der das Lesen virtueller ROM-Dateien in Bytes erfordert. Ich habe diesen Code, der eine readByte-Methode aufruft. Wenn Sie sich die Werte anschauen, die dieser Ausdruck ausgibt, sind einige von ihnen normale Bytes, und einige von ihnen sind verrückt groß. enter image description hereDataInputStream readByte gibt einen großen Wert zurück

+0

Haben Sie keine Angst, mir zu sagen, wenn ich keine Informationen auslasse! –

+1

Um die Lesbarkeit zu erhöhen, sollten Sie Ihren Code lieber als Screenshot schreiben – limonik

Antwort

2

DataInputStream.readByte() gibt eine byte die ein signierten Typ ist. Der zurückgegebene Wert kann minus sein.

Integer.toHexString(intValue) gibt eine hex-Darstellung des interpretierten Wertes als unsigned integer.

So werden positive Werte (wie 76, 12) wie erwartet gedruckt, während negative Werte in two's complement representation gedruckt werden (die Art, wie negative Werte in Java dargestellt werden). Der gedruckte Wert von fffffffe ist beispielsweise eine 32-Bit- (Ganzzahlgröße) Zweierkomplementdarstellung von -2.


Um richtig Bytewerte zu drucken, verwenden Sie diese:

System.out.println(String.format("%02x", tmp)); 

Beachten Sie, dass dies auch mit Nullen pad-links gedruckt Werte richtig.

+0

Ich denke, das Drucken von Bytes durch ihre Hex-Werte ist nützlicher für das Dateiformat (Header Bytes usw.) ... Allerdings sollte Asker wirklich klären, ob sie die Hex-Werte oder wollen Dezimalwerte. –

+0

Vielen Dank! :) –

Verwandte Themen