Je sais que vous pouvez utiliser printf
et également utiliser StringBuilder.append(String.format("%x", byte))
pour convertir les valeurs en valeurs HEX et les afficher sur la console. Mais je veux être en mesure de formater le tableau d'octets afin que chaque octet soit affiché en HEX au lieu de décimal.
Voici une section de mon code que j'ai déjà qui fait les deux premières façons que j'ai déclarées:
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 été divisée en tableau d'octets était:
"1E2021345A2B"
Mais l'affiche en décimal sur la console comme:
"303233529043"
Quelqu'un pourrait-il m'aider à savoir comment obtenir les valeurs réelles en hexadécimal et les afficher de cette manière naturellement. Merci d'avance.
Vous pouvez utiliser String javax.xml.bind.DatatypeConverter.printHexBinary(byte[])
. par exemple.:
public static void main(String[] args) {
byte[] array = new byte[] { 127, 15, 0 };
String hex = DatatypeConverter.printHexBinary(array);
System.out.println(hex); // prints "7F0F00"
}
String.format
utilise en fait la classe Java.util.Formatter. Au lieu d'utiliser la méthode pratique String.format, utilisez directement un formateur:
Formatter formatter = new Formatter();
for (byte b : bytes) {
formatter.format("%02x", b);
}
String hex = formatter.toString();
La façon dont je le fais:
private static final char[] HEX_CHARS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
'B', 'C', 'D', 'E', 'F' };
public static String toHexString(byte[] bytes) {
char[] hexChars = new char[bytes.length * 2];
int v;
for (int j = 0; j < bytes.length; j++) {
v = bytes[j] & 0xFF;
hexChars[j * 2] = HEX_CHARS[v >>> 4];
hexChars[j * 2 + 1] = HEX_CHARS[v & 0x0F];
}
return new String(hexChars);
}
Essaye ça
byte[] raw = some_bytes;
javax.xml.bind.DatatypeConverter.printHexBinary(raw)