Comment convertir un tableau d'octets au format hexadécimal en Java
Je sais que vous pouvez utiliser printf
et également utiliser StringBuilder.append(String.format("%x", byte))
pour convertir des valeurs en valeurs hexadécimales et les afficher sur la console. Mais je veux être en mesure de réellement format du tableau d'octets, de sorte que chaque octet est affiché comme HEX au lieu de la virgule.
Voici une partie de mon code que j'ai déjà qui ne le premier de deux façons, j'ai dit:
if(bytes > 0)
{
byteArray = new byte[bytes]; //Set up array to receive these values.
for(int i=0; i<bytes; i++)
{
byteString = hexSubString(hexString, offSet, CHARSPERBYTE, false); //Isolate digits for a single byte.
Log.d("HEXSTRING", byteString);
if(byteString.length() > 0)
{
byteArray[i] = (byte)Integer.parseInt(byteString, 16); //Parse value into binary data array.
}
else
{
System.out.println("String is empty!");
}
offSet += CHARSPERBYTE; //Set up for next word hex.
}
StringBuilder sb = new StringBuilder();
for(byte b : byteArray)
{
sb.append(String.format("%x", b));
}
byte subSystem = byteArray[0];
byte highLevel = byteArray[1];
byte lowLevel = byteArray[2];
System.out.println("Byte array size: " + byteArray.length);
System.out.printf("Byte 1: " + "%x", subSystem);
System.out.printf("Byte 2: " + "%x", highLevel);
System.out.println("Byte 3: " + lowLevel);
System.out.println("Byte array value: " + Arrays.toString(byteArray));
System.out.println("Byte array values as HEX: " + sb.toString());
}
else
{
byteArray = new byte[0]; //No hex data.
//throw new HexException();
}
return byteArray;
La chaîne qui a éclaté dans le tableau d'octets a été:
"1E2021345A2B"
Mais les affiche en décimal sur la console:
"303233529043"
Quelqu'un pourrait-il m'aider sur la façon d'obtenir les valeurs réelles pour être en hexadécimal et en être affichés dans la façon naturelle. Je vous remercie à l'avance.
OriginalL'auteur James Meade | 2013-10-18
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le
String javax.xml.bind.DatatypeConverter.printHexBinary(byte[])
. par exemple:Le plus court chemin d'une autre façon que j'ai trouvé.
VGR réponse fonctionne également sur Android, et il est beaucoup plus simple.
Pour Android, voir la VGR de la solution.
Haut de réponse pour les applications d'entreprise, où javax.xml.bind.DatatypeConverter est habituellement disponible
OriginalL'auteur Paul Vargas
String.format
effectivement fait usage de la java.util.Classe de mise en forme. Au lieu de l'aide de la Chaîne.format méthode de convenance, l'utilisation d'un module de Formatage directement:Solution la plus propre, et de loin. Merci!!!! La peine de mentionner que vous pouvez mettre
x
en majuscules et ajouter un espace blanc dans la partie supérieure de cas pour le rendre plus lisibleOriginalL'auteur VGR
La façon dont je le fais:
Il nécessite deux caractères hexadécimaux pour 'décrire' 1 octet. Vous pouvez représenter de 1 hex de caractères à l'aide de 1 octet, si vous encodez le hex char en utilisant l'hexagone chrar du code ASCII. Par conséquent, vous avez besoin de deux octets pour décrire un octet en hexadécimal, ASCII. Je ne suis pas sûr de ce que vous voulez vraiment.
Je veux avoir deux personnages occupant 1 seul octet. Donc pour mon exemple, j'ai un tableau d'octets de 6.
Vous devriez en apprendre davantage sur les octets, chiffre systèmes, des personnages et de leur codage en bits, appelé "encodage des caractères'. Par défaut, un caractère ascii est codé à l'aide de 1 octet (8 bits). L'hexadécimal est un système de numération où chaque nombre peut s'étendre de 0 à F. Ce nombre peut être représenté par un caractère ascii. Vous avez besoin de deux nombres hexadécimaux pour décrire un octet (8 bits). Si vous souhaitez afficher ces deux nombres à l'aide de caractères ascii, alors vous avez besoin de deux personnages et donc deux octets.
Et ce qui est exactement sur la conversion entre le chiffre des systèmes: youtube.com/watch?v=Fpm-E5v6ddc
OriginalL'auteur Tamas
Essayer cette
OriginalL'auteur Dharmesh Gohil