Oui, personnellement j'ai essayé tout ça et j'en ai eu marre.
Soit j'utilise commons-codec, soit j'écris mon propre parseur de bytes non signés en hexadécimal.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public static int parseHexDigit(char ch) {
if(ch >= '0' || ch <= '9') {
return ch - '0';
} else if(ch >= 'a' || ch <= 'f') {
return 10 + ch - 'a';
} else if(ch >= 'A' || ch <= 'F') {
return 10 + ch - 'A';
} else {
throw new IllegalArgumentException("bad hex digit: " + ch);
}
}
public static byte parseHexByte(String s) {
if(s.length() != 2) {
throw new IllegalArgumentException("String cannot be hexadecimal byte: " + s);
}
return (byte)(parseHexDigit(s.charAt(0))*16 + parseHexDigit(s.charAt(1)));
} |
C'est malheureux que tout le monde doive faire ça ou inclure une bibliothèque pour, mais ça prend pas des heures non plus.
Edit : à noter qu'on peut aussi bricoler à coup de Integer.parseInt(n, 16) et caster ensuite en byte. Mais dans ce cas il faut s'assurer qu'il y a bien 2 chiffres et qu'il n'y a pas de signe plus, de signe moins, en fait que c'est deux chiffres hexadécimaux et rien d'autre.
À ce niveau-là, je préfère encore le programmer moi-même, c'est plus clair.
Partager