I know that you can use printf
and also use StringBuilder.append(String.format("%x", byte))
to convert values to HEX values and display them on the console. But I want to be able to actually format the byte array so that each byte is displayed as HEX instead of decimal.
Here is a section of my code that I have already that does the first two ways that I stated:
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;
The string that was split up into the byte array was:
"1E2021345A2B"
But displays it as decimal on the console as:
"303233529043"
Could anyone please help me on how to get the actual values to be in hex and be displayed in that way naturally. Thank you in advance.
In the above program, we have a byte array named bytes. To convert byte array to a hex value, we loop through each byte in the array and use String 's format (). We use %02X to print two places ( 02) of Hexadecimal ( X) value and store it in the string st. This is a relatively slower process for large byte array conversion.
Use Integer.toString (int, redix) where int is byte to be converted and redix is 16 for hexadecimal format.
Using the %X placeholder, String.format () is able to encode most primitive types ( short, int, long) to hex: String.format ("%X", ByteBuffer.wrap (eightByteArray).getLong ()); If you exclusively have 4 bytes arrays you can use the toHexString method of the Integer class:
Using the Hexadecimal Representation of BigInteger class in Java is quite an avoided way of converting byte array to hex string due to its slow speed. Here one can also observe that since we deal with numbers and not arbitrary byte strings, this may omit leading zeros in cases.
String.format
actually makes use of the java.util.Formatter class. Instead of using the String.format convenience method, use a Formatter directly:
Formatter formatter = new Formatter();
for (byte b : bytes) {
formatter.format("%02x", b);
}
String hex = formatter.toString();
As of Java 17, HexFormat can do this in one line:
String hex = HexFormat.of().formatHex(bytes);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With