Ich habe eine Spezifikation, die liest, dass die nächsten zwei Bytes int signiert sind.
Um das in Java zu lesen, habe ich folgendes
Wenn ich einen signed int in Java mit dem folgenden Code lese, erhalte ich einen Wert von 65449
Logik für die Berechnung von unsigned
%Vor%Ich glaube, das ist falsch, denn wenn ich und mit 0xff bekomme ich ein unsigned Äquivalent
Also habe ich die & amp; 0xff und die unten angegebene Logik
%Vor%Ich habe versucht, diese Werte mit der Art und Weise, wie die Spezifikation liest, zu vergleichen, aber das sieht falsch aus. Da fällt die Größe des Heap nicht darunter.
Was ist der richtige Weg für die signierte int-Berechnung in Java?
Hier geht's zur Spezifikation
somespec() { xtype 8 uint8 xStyle 16 int16 }
xStyle: Eine vorzeichenbehaftete ganze Zahl, die einen Offset (in Byte) vom Anfang dieser Widget () - Struktur zum Anfang einer xStyle () - Struktur darstellt, die ererbte Stile für vom Widget definierte Seiten sowie Stile ausdrückt, die speziell für dieses Widget gelten .
Wenn Sie einen vorzeichenbehafteten 16-Bit Wert haben, wollen Sie short
und int ist 32-Bit, der auch die gleichen Werte enthalten kann, aber nicht so natürlich.
Es scheint, dass Sie einen kleinen 16 Bit-Wert für den Endian-Wert möchten.
%Vor%oder
%Vor%BTW: Sie können ein int verwenden, aber es ist nicht so einfach.
%Vor%oder
%Vor%Angenommen, Byte [1] ist das MSB und Byte [0] ist das LSB, und Sie möchten, dass die Antwort eine 16-Bit-Ganzzahl mit Vorzeichen ist:
%Vor%Dann um eine vorzeichenbehaftete 32-Bit-Ganzzahl zu erhalten:
%Vor%Übrigens sollte die Spezifikation angeben, welches der beiden Bytes das MSB ist und welches das LSB ist. Wenn nicht und wenn es keine Beispiele gibt, können Sie es nicht implementieren!
Irgendwo in der Spezifikation wird es sagen, wie ein "int16" dargestellt wird. Füge diesen Teil ein. Oder fügen Sie einen Link zu der Spezifikation ein, damit wir sie selbst lesen können.
Schauen Sie sich DataInputStream.readInt()
an. Sie können entweder von dort aus einen Code eingeben oder einfach DataInputStream verwenden: Umschließen Sie damit Ihren Eingabestream und lesen Sie die eingegebenen Daten einfach.
Für Ihre Bequemlichkeit ist dies der Code:
%Vor%Haben Sie eine Möglichkeit, eine korrekte Ausgabe für eine bestimmte Eingabe zu finden? technisch gesehen ist eine int-Größe 4 Bytes, also können Sie mit nur 2 Bytes das Vorzeichen-Bit nicht erreichen.