Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to convert byte array to hex format in Java

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.

like image 781
James Meade Avatar asked Oct 18 '13 13:10

James Meade


People also ask

How do I convert a byte array to a hex value?

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.

How to convert int to hexadecimal in Java?

Use Integer.toString (int, redix) where int is byte to be converted and redix is 16 for hexadecimal format.

How to convert a string to Hex string?

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:

What is hexadecimal representation of BigInteger in Java?

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.


1 Answers

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);
like image 189
VGR Avatar answered Oct 18 '22 18:10

VGR