Wie kann ich einen int in drei Bytes in Java drehen?
-
06-07-2019 - |
Frage
Ich versuche, eine int
in drei bytes
zu umwandeln Vertreter dieses int
(Big Endian).
Ich bin sicher, es hat etwas mit bitweise und und Bitverschiebung zu tun. Aber ich habe keine Ahnung, wie es zu tun gehen.
Zum Beispiel:
int myInt;
// some code
byte b1, b2 , b3; // b1 is most significant, then b2 then b3.
* Hinweis, ich bin mir dessen bewusst, dass ein int 4 Byte und die drei Bytes haben eine Chance von Über- / Unterschreitung.
Lösung
Um das niederwertige Byte zu erhalten:
b3 = myInt & 0xFF;
Der zweite niederwertige Byte:
b2 = (myInt >> 8) & 0xFF;
Und der dritte niedrigstwertige Byte:
b1 = (myInt >> 16) & 0xFF;
Erklärung:
bitweisen AND-Verknüpfung mit einem Wert 0xFF (11111111 binär) wird die niedrigstwertigen 8 Bits zurück (Bits 0 bis 7) in dieser Zahl. Verschieben die Zahl rechts 8mal legt 8 Bit bis 15 in den Bitpositionen 0 bis 7 so ANDing mit 0xff wird das zweite Byte zurück. In ähnlicher Weise verschiebt die Zahl auf der rechten Seite 16mal setzt Bits 16 bis 23 in die Bitpositionen 0 bis 7 so ANDing mit 0xFF gibt das 3. Byte.
Andere Tipps
byte b1 = (myint >> 16) & 0xff;
byte b2 = (myint >> 8) & 0xff;
byte b3 = myint & 0xff;
Ich bin nicht sicher, wie dies in Java holfds obwohl, ich aam keine Java-dev
Ein int paßt nicht in 3 Bytes. Jedoch davon aus, dass Sie wissen, dass diese insbesondere diejenigen tun:
byte b1 = (myInt & 0xff);
myInt >>= 8;
byte b2 = (myInt & 0xff);
myInt >>= 8;
byte b3 = (myInt & 0xff);
In Java
int myInt = 1;
byte b1,b2,b3;
b3 = (byte)(myInt & 0xFF);
b2 = (byte)((myInt >> 8) & 0xFF);
b1 = (byte)((myInt >> 16) & 0xFF);
System.out.println(b1+" "+b2+" "+b3);
Ausgänge 0 0 1