2013-05-07 4 views
0

Je sais qu'il existe 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 ce que j'écris? Hex à int ou hex à décimal? Lequel est le bon?Java octet à int

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

Répondre

4

Est-ce exact ce que j'écris?

Le code que vous avez posté fait la conversion implicite de int à String, mais qui affiche un nombre décimal. Il est important de comprendre qu'un nombre n'est ni hexadécimal ni 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 est importante. De même, vous pouvez exprimer le même nombre avec différents littéraux, de sorte que ces deux déclarations sont exactement équivalentes:

int x = 16; 
int x = 0x10; 

Quoi qu'il en soit, pourquoi je suis en train de 4864 au lieu de 19

Parce que vous êtes explicitement décalage à gauche de la valeur de 8 bits:

buffer[51] << 8 

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

2

en conséquence 4864 est 0x1300 en hexadécimal. si vous attendez 19 (0x13) comme résultat alors je suppose que vous essayez de faire un changement de vitesse circulaire.

vous pouvez le faire en utilisant l'é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)); 
Questions connexes