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