十六进制字符串转换为字节Java

时间:2018-04-11 11:10:16

标签: java arrays hex byte

我遇到问题,因为当使用getBytes()方法时,java当然会将HEX代码转换为非okey的ASCI,我希望获得带有字节的数组:

[01, 00, 0A, 02, 00, 00, ....., 28, 72];

我的代码:

  byte array[] = { (byte) 0x1, (byte) 0x0, (byte) 0x0A, (byte) 0x02, (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x72, (byte) 0x28 };

            Log.v("OUTPUT BYTE", Arrays.toString(array.getBytes()));

目前的结果:

[48, 49, 48, 48, 48, 97, 48, 50, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 55, 50, 50, 56]

我需要数组中的HEX字节。

3 个答案:

答案 0 :(得分:2)

示例代码:

package com.test;

import java.util.Arrays;

public class Hexa {

    public static void main(String[] args) {
        byte array3[] = { (byte) 0x1, (byte) 0x0, (byte) 0x0A, (byte) 0x02, (byte) 0x0, (byte) 0x0, (byte) 0x0,
                (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0,
                (byte) 0x0, (byte) 0x72, (byte) 0x28 };

        String[] hexArray = new String[array3.length];
        for (int i = 0; i < array3.length; i++) {
            hexArray[i] = String.format("%02X ", array3[i]);
        }

        System.out.println(Arrays.asList(hexArray));
    }

}

输出:

[01 , 00 , 0A , 02 , 00 , 00 , 00 , 00 , 00 , 00 , 00 , 00 , 00 , 00 , 00 , 00 , 72 , 28 ]

答案 1 :(得分:0)

尝试以下代码,它可以正常工作:

byte array3[] = { (byte) 0x1, (byte) 0x0, (byte) 0x0A, (byte) 0x02, (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x72, (byte) 0x28 };

        Log.v("OUTPUT BYTE", Arrays.toString(data));

答案 2 :(得分:0)

byte[] data = { (byte) 0x1, (byte) 0x0, (byte) 0x0A, (byte) 0x02, (byte) 0x0, (byte) 0x0,
    (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0,
    (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x72, (byte) 0x28 };

StringBuilder sb = new StringBuilder(data.length * 4 + 2);
sb.append('[');
for (byte b : data) {
    sb.append(String.format("%02X, ", 0xFF & b));
}
if (data.length != 0) {
    sb = sb.setLength(sb.length() - 2);
}
sb.append(']');
Log.v("OUTPUT_BYTE, sb.toString());

%02X将给出大写十六进制数字,%02x小写字母十六进制数字,均为零填充。由于字节有符号(byte)0x80实际上是-128,因此需要使用由字节掩盖的int:0xFF & b

为StringBuilder添加良好的初始容量意味着在追加时减少内存的重新分配。