Je calcule une somme de contrôle de 16 bits sur mes données que je dois envoyer au serveur où il doit recalculer et correspondre à la somme de contrôle fournie. La valeur de la somme de contrôle que j'obtiens est en int mais je n'ai que 2 octets pour l'envoi de la valeur. Donc, je lance int
en short
en appelant la méthode shortToBytes
. Cela fonctionne bien jusqu'à ce que la valeur de checksum est inférieure à 32767 par la suite, je reçois des valeurs négatives. Il est vrai que java n'a pas de primitives non signées, donc je ne suis pas en mesure d'envoyer des valeurs supérieures à la valeur maximale de short
signé autoriséjava convertir int en court
Comment puis-je faire cela, convertir int en court et envoyer sur le réseau sans se soucier de la troncature et signé & int.
Sur les deux côtés, j'ai un programme Java en cours d'exécution.
private byte[] shortToBytes(short sh) {
byte[] baValue = new byte[2];
ByteBuffer buf = ByteBuffer.wrap(baValue);
return buf.putShort(sh).array();
}
private short bytesToShort(byte[] buf, int offset) {
byte[] baValue = new byte[2];
System.arraycopy(buf, offset, baValue, 0, 2);
return ByteBuffer.wrap(baValue).getShort();
}
désolé j'ai oublié de préciser que la somme de contrôle est CRC16, donc en aucun cas il va avoir une valeur qui ne peut pas tenir dans 16 bits. – changed