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.

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top