Pour la journalisation, nous convertissons les journaux en tableau d'octets, puis en chaîne hexadécimale. Je veux le récupérer dans une chaîne Java), mais je ne suis pas en mesure de le faire.
La chaîne hexagonale dans le fichier journal ressemble à quelque chose comme
fd00000aa8660b5b010006acdc0100000101000100010000
Comment puis-je décoder cela?
Utilisation de Hex
dans Apache Commons:
String hexString = "fd00000aa8660b5b010006acdc0100000101000100010000";
byte[] bytes = Hex.decodeHex(hexString.toCharArray());
System.out.println(new String(bytes, "UTF-8"));
byte[] bytes = DatatypeConverter.parseHexBinary(hexString);
String result= new String(bytes, encoding);
Commencez par lire les données, puis convertissez-les en tableau d'octets:
byte b = Byte.parseByte(str, 16);
puis utilisez String
constructeur:
new String(byte[] bytes)
ou si le jeu de caractères n'est pas celui par défaut du système, alors:
new String(byte[] bytes, String charsetName)
Vous pouvez aller de String (hex)
à byte array
À String as UTF-8(?)
. Assurez-vous que votre chaîne hexagonale ne comporte pas d'espaces de début et autres.
public static byte[] hexStringToByteArray(String hex) {
int l = hex.length();
byte[] data = new byte[l/2];
for (int i = 0; i < l; i += 2) {
data[i/2] = (byte) ((Character.digit(hex.charAt(i), 16) << 4)
+ Character.digit(hex.charAt(i+1), 16));
}
return data;
}
Usage:
String b = "0xfd00000aa8660b5b010006acdc0100000101000100010000";
byte[] bytes = hexStringToByteArray(b);
String st = new String(bytes, StandardCharsets.UTF_8);
System.out.println(st);
Essayez le code suivant:
public static byte[] decode(String hex){
String[] list=hex.split("(?<=\\G.{2})");
ByteBuffer buffer= ByteBuffer.allocate(list.length);
System.out.println(list.length);
for(String str: list)
buffer.put(Byte.parseByte(str,16));
return buffer.array();
}
Pour convertir en chaîne, créez simplement une nouvelle chaîne avec l'octet [] renvoyé par la méthode de décodage.
Juste un autre moyen de convertir une chaîne hexadécimale en Java chaîne:
public static String unHex(String arg) {
String str = "";
for(int i=0;i<arg.length();i+=2)
{
String s = arg.substring(i, (i + 2));
int decimal = Integer.parseInt(s, 16);
str = str + (char) decimal;
}
return str;
}