字节数组为十六进制并还原为java

时间:2017-01-01 05:50:44

标签: java

我有一个字节数组,其值来自调试器

0 = -124
1 = 56
2 = 56
3 = 65

然后转换为十六进制

StringBuilder res1 = new StringBuilder();
for (byte b : Bytes) {
    res1.append(String.format("%02X-", b));
}

我得到的结果是84-38-38-41

,我想将其恢复为之前的相同值,如

如果我有84-38-38-41,我怎么能得到值为

的bytearray
0 = -124
1 = 56
2 = 56
3 = 65

表示十六进制字符串到十进制数组

2 个答案:

答案 0 :(得分:2)

将所有“ - ”替换为“”,这就完成了你的工作。我希望这会有所帮助。

        byte [] data = {-124,56,56,24};
        StringBuilder res1 = new StringBuilder();
        for (byte b : data) {
            res1.append(String.format("%02X-",b));
        }
        String new_String  = res1.toString().replaceAll("-", "");
        byte [] output = DatatypeConverter.parseHexBinary(new_String);
        for(int i = 0;i < output.length;i++){
            System.out.println(output[i]);
        }

答案 1 :(得分:0)

字节[]十六进制:

public String getHex(byte[] raw) {
        final String HEXES = "0123456789abcdef";
        final StringBuilder hex = new StringBuilder(2 * raw.length);
        for (final byte b : raw) {
            hex.append(HEXES.charAt((b & 0xF0) >> 4)).append(HEXES.charAt((b & 0x0F)));
        }
        return hex.toString();
    }

十六进制为字节[]:*

public static byte[] hexStringToByteArray(String s) {
        int len = s.length();
        byte[] data = new byte[len / 2];
        for (int i = 0; i < len; i += 2) {
            data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                    + Character.digit(s.charAt(i+1), 16));
        }
        return data;
    }

记住... 始终练习安全的十六进制!(:

相关问题