
Envoyé par
304bl
or vous le savez deja les byte sont signé et donc la conversion par exemple de la valeur 0xd4 donne au final 2 byte en java
Quoi ? pas du tout, ça donne juste un byte négatif.
Je sais que c'est pas évident, mais les bytes sont capables de contenir 256 valeurs différentes. Ces valeurs, d'après Java, sont -128 à 127 ; au lieu de 0 à 255. Mais ça n'empêche qu'il existe suffisamment de valeurs différentes pour stocker les 256 possibilités.
En hexa, il y a 256 nombres de 0x00 à 0xFF, il est donc possible de les stocker dans un byte. Seulement, dès qu'on dépasse 0x7F (la valeur 127,) on doit utiliser les bytes négatifs et on commence à moins bien comprendre comment ça marche.
Le plus simple est de prendre sa valeur int, et de la caster vers byte.
byte byteValue = (byte)intValue;
Comment ça marche, c'est pas compliqué. Si prends prends un byte et que tu l'incrémentes :
1 2
| byte byteValue = 0;
byteValue++; |
byteValue passe à 1.
Continue comme ça indéfiniment, il se passe quoi ? byteValue arrive à 127, et ensuite ? C'est la valeur max d'un byte. Eh ben, ensuite, il boucle. Il passe à la valeur min, -128. Puis -127, puis -126 et ainsi de suite jusqu'à zéro, puis jusqu'à 127, et tout recommence. Les valeurs bouclent.
Les valeurs bouclent si on incrémente de 1, mais aussi si on incrémente de n'importe quoi.
Et donc, ta valeur 0xd4, c'est rien d'autre que 0x7F incrémenté de 0x55. Quand tu vas convertir le int vers byte, et que ça dépasse 0x7F, il va simplement boucler vers les valeurs négatives.
Voilà comment ça marche, mais bon, c'est juste la démonstration.
Tout ce qu'il faut faire, c'est un cast de int vers byte.
Partager