Byte Java a int


So che ci sono N thread per questa domanda, ma alcune persone stanno usando metodi diversi e diversi per convertire un byte in int. È corretto quello che sto scrivendo? Esadecimale a int o esadecimale a decimale? Qual è il corretto?

Ad ogni modo, perché ottengo 4864 invece di 19 ?

byte[] buffer = ....
buffer[51] = 0x13;
System.out.println( buffer[51] << 8 );
Author: Zbarcea Christian, 2013-05-08

2 answers

È corretto quello che sto scrivendo?

Il codice che hai pubblicato fa la conversione implicita di int in String, ma questo lo mostrerà in decimale. È importante capire che un numero non è in esadecimale o decimale - è solo un numero. Lo stesso numero può essere convertito in diverse rappresentazioni testuali, ed è allora che la base è importante. Allo stesso modo puoi esprimere lo stesso numero con letterali diversi, quindi queste due affermazioni sono esattamente equivalente:

int x = 16;
int x = 0x10;

Comunque, perché sto ricevendo 4864 invece di 19

Perché stai spostando esplicitamente il valore a sinistra di 8 bit:

buffer[51] << 8

Questo è fondamentalmente moltiplicando per 256, e 19 * 256 è 4864.

 4
Author: Jon Skeet, 2013-05-07 20:04:21

Ottieni 4864 come risultato perché 4864 è 0x1300 in hex. se ti aspetti 19 (0x13) come risultato, immagino che tu stia cercando di fare lo spostamento circolare.

Puoi farlo usando la scrittura in questo modo,

  /*hex 0x13 (19 in decimal) is assigned to buffer[51] as int*/
  buffer[51] = 0x13;  
  System.out.println( Integer.rotateRight(buffer[51], 8));
 2
Author: khanmizan, 2013-05-07 20:29:18