Salut,
L'hexadécimal n'est juste qu'une représentation de nombres. Peu importe que tu affiches des nombres en décimal ou en héxadécimal, ils sont stockés de toutes manières en binaire. On peut bien sûr stocker de l'héxadécimal dans une chaîne de caractères, mais ça ne sert qu'essentiellement à l'affichage. Pour envoyer des données en réseau, autant les envoyer sous forme d'octets qui contiennent directement la valeur numérique.
Par exemple, tu peux utiliser un simple tableau d'octets :
byte[] data = ByteArrayUtils.toByteArray(&x02,&x32,&x00,&x00,&x00,&x06,&x64,&x03,&x00,&x00,&x00,&x02);
Si tu veux l'afficher à un moment ou un autre tu peux toujours faire :
1 2 3 4
|
System.out.println(ByteArrayUtils.toString(data, " ")); // affiche 02 32 00 00 00 06 64 03 00 00 00 02
System.out.println(ByteArrayUtils.toString(data)); // affiche 023200000006640300000002 |
Avec
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| public class ByteArrayUtils {
public static byte[] toByteArray(int... vals) {
byte[] bvals = new byte[vals.length];
for (int i = 0; i < vals.length; i++) {
bvals[i] = (byte) (vals[i] & 0xFF);
}
return bvals;
}
public static String toString(byte[] array) {
return toString(array, null);
}
public static String toString(byte[] array, CharSequence delimiter) {
if ( delimiter==null ) {
StringBuilder joiner = new StringBuilder(array.length*2);
for(byte b : array) {
joiner.append(String.format("%02X", b&0xFF));
}
return joiner.toString();
}
else {
StringJoiner joiner = new StringJoiner(delimiter);
for(byte b : array) {
joiner.add(String.format("%02X", b&0xFF));
}
return joiner.toString();
}
}
} |
NB si ta trame fait au max 8 octets, tu peux même directement utiliser un type long, ou si la trame fait max 4 octets un int :
Partager