Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich will aus einem binären file 4 bytes auslesen die eine unsigned Zahl darstellen sollte.
Wenn ich die 4 bytes mit byte auslese kommt folgendes raus:
18
19
0
0
Die Zahl die ich im endeffekt benötige ist die: 4096
Ich verwende ein RandomAccessFile objekt mit der readUnsignedShort(); methode welche 2 bytes liest. Das funktioniert nur solange die letzten beiden bytes null sind!!! Wie jetzt aber wenn alle 4 bytes belegt sind? Gibts sowas wie readUnsignedInt()?!?!?
Ich könnte es auch händisch rechnen und zwar so: Byte(4) * 256^3 + Byte(3) * 256^2 + Byte(2) * 256 + Byte(1) aber das ist häßlich
Er schiebt die einzelnen Bytes auf die richtigen Positionen:
byte << 8 schiebt byte um 8 Bit nach links. Die anschließende
Oder-Verknüpfung verbindet dann die einzelnen, verschobenen, Bytes
in einen 16 oder 32-Bit Wert.
- du hast in der Datei 18, 19, 0, 0
- dies entspricht 00010010, 00010011, 00000000, 00000000 im Binärsystem
- Bei Little endian wird das Byte mit dem niedrigsten Wert zuerst geschrieben.
Klartext: Umgekehrte Byte-Reihenfolge als du es haben möchtest.
So steht es in der Datei
18 19 0 0
00010010 00010011 00000000 00000000
So willst du (bzw. sollst du ;) ) es haben
0 0 19 18
00000000 00000000 00010011 00010010
1) Byte lesen (die 18)
00000000 00000000 00000000 00010010
2) Byte lesen (die 19) und 8 Bit nach rechts verschieben
00000000 00000000 00000000 00010011 gelesen
00000000 00000000 00010011 00000000 nach der Verschiebung
3) Byte lesen und 16 Bit nach rechts verschieben
... OK, es ist eine 0, lassen wir es mal. Doofes Beispiel.
4) Byte lesen und 24 Bit nach rechts verschieben
... ebenfalls 0
Jetzt die Oder-Verknüpfung der Bits
00000000 00000000 00000000 00010010 (aus 1)
00000000 00000000 00010011 00000000 (aus 2)
00000000 00000000 00000000 00000000 (aus 3)
00000000 00000000 00000000 00000000 (aus 4)
= 00000000 00000000 00010011 00010010 (vergleiche es mal mit dem Wert oben)
hmmm das hätte mir auch gleich einfallen können aber ich muß natürlich auch binär ins file schreiben und da muß ich ja auch die reihenfolge der bytes verändern oder? Geht das auf die gleiche weise??