Octet Java à int


Je sais qu'il y a n threads pour cette question mais certaines personnes utilisent des méthodes différentes et différentes pour convertir un octet en int. Est-ce correct que suis-je écrit? Hex à int ou hex à décimal? Lequel est le bon?

Quoi qu'il en soit, pourquoi je reçois 4864 au lieu de 19 ?

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

2 answers

Est-ce correct ce que j'écris?

Le code que vous avez posté effectue une conversion implicite de int en String, mais cela l'affichera en décimal. Il est important de comprendre qu'un nombre n'est pas hexadécimal ou décimal - c'est juste un nombre. Le même nombre peut être converti en différentes représentations textuelles, et c'est à ce moment que la base compte. De même, vous pouvez exprimer le même nombre avec des littéraux différents, donc ces deux instructions sont exactement équivalent:

int x = 16;
int x = 0x10;

Quoi qu'il en soit, pourquoi je reçois 4864 au lieu de 19

Parce que vous décalez explicitement la valeur de 8 bits:

buffer[51] << 8

C'est essentiellement multiplier par 256, et 19 * 256 est 4864.

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

Vous obtenez 4864 en conséquence car 4864 est 0x1300 en hexadécimal. si vous attendez 19(0x13) comme résultat, je suppose que vous essayez de faire un déplacement circulaire.

Vous pouvez le faire en utilisant une écriture comme ça,

  /*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