Domanda

Sto cercando di convertire un int in tre byte che rappresentano quel int (big endian).

Sono sicuro che abbia qualcosa a che fare con il bit-saggio e il bit shifting. Ma non ho idea di come procedere.

Ad esempio:

int myInt;

// some code

byte b1, b2 , b3; // b1 is most significant, then b2 then b3.

* Nota, sono consapevole che un int è 4 byte e che i tre byte hanno una possibilità di over / underflow.

È stato utile?

Soluzione

Per ottenere il byte meno significativo:

b3 = myInt & 0xFF;

Il secondo byte meno significativo:

b2 = (myInt >> 8) & 0xFF;

E il terzo byte meno significativo:

b1 = (myInt >> 16) & 0xFF;

Spiegazione:

AND bit a bit ANDing un valore con 0xFF (11111111 in binario) restituirà gli 8 bit meno significativi (bit da 0 a 7) in quel numero. Spostando il numero a destra di 8 volte, i bit da 8 a 15 vengono posizionati nei bit da 0 a 7, quindi ANDing con 0xFF restituirà il secondo byte. Allo stesso modo, spostando il numero a destra 16 volte, i bit da 16 a 23 vengono posizionati in posizioni di bit da 0 a 7, quindi ANDing con 0xFF restituisce il terzo byte.

Altri suggerimenti

byte b1 = (myint >> 16) & 0xff;
byte b2 = (myint >> 8) & 0xff;
byte b3 = myint & 0xff;

Non sono sicuro di come questi lupi di Java, però, non sono un dev di Java

Un int non si adatta a 3 byte. Tuttavia, supponendo che tu sappia che questi particolari lo fanno:

   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);

genera 0 0 1

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top