Ich habe eine Binärdatei mit unsignierten Kurzschlüssen. Ich muss einen vorzeichenlosen Wert von diesen Bytes zu einem primitiven Kurzschluss in JAVA nehmen. Byte-Reihenfolge ist Little Endian. Ich versuche, auf diese Weise:Konvertiere 2 Byte (unsigned short) nach Java kurz aus der Binärdatei
byte[] bytes = new byte[frameLength];
for(int i = 0; i < fh.nFrames; i++) {
raf.readFully(bytes);
for(int j = 2; j < frameLength/2; j++) {
short s;
s = (short) (bytes[2*j + 1] << 8 | bytes[2 * j]);
System.out.println(s);
System.out.println(Integer.toBinaryString(s));
}
}
Beispiel: Fall 1 (ok): unsigned short: 8237 in hex (Little Endian): 2D 20 binär (Big Endian): 0010 0000 0010 1101 und System.out.println (Integer.toBinaryString (s)) geben Sie 10000000101101. Es ist korrekt.
Fall 2 (nicht ok) unsigned short: 384 in hex (Little Endian): 80 01 binär (Big Endian): 0000 0001 1000 0000 und System.out.println (Integer.toBinaryString (s)) geben Sie uns 11111111111111111111111110000000. System.out.println (s) geben Sie -128. Das ist nicht richtig. Wie kann ich 384 Wert von diesem bekommen?
Jemand hat eine Idee, warum es nicht funktioniert?
Es ist richtig. Erweiterung signieren. Bytes sind in Java signiert. – EJP
Ok, aber wie kann ich 384 davon bekommen? – santiag
Wird ['DataInputStream # readUnsignedShort'] (https://docs.oracle.com/javase/8/docs/api/java/io/DataInputStream.html#readUnsignedShort--) für Sie arbeiten? – bradimus