java - 在 Java 中,如何将十六进制字符串转换为字节 []?

标签 java hex

我在 Java 中使用以下函数将加密的字符串转换为十六进制格式:

public static String toHex(byte [] buf) {
    StringBuffer strbuf = new StringBuffer(buf.length * 2);
    int i;
    for (i = 0; i < buf.length; i++) {
        if (((int) buf[i] & 0xff) < 0x10) {
            strbuf.append("0");
        }
        strbuf.append(Long.toString((int) buf[i] & 0xff, 16));
    }
    return strbuf.toString();
}

现在我想将该十六进制字符串转换回字节数组。我该怎么做?

例如,

(1) Plain Text = 123
(2) Encrypted Text = «h>kq*«¬Mí“~èåZ  \}?
(3) Encrypted Text in Hex = f263575e7b00a977a8e9a37e08b9c215feb9bfb2f992b2b8f11e

我可以从 (2) 转到 (3),但我如何从 (3) 转到 (2)?

最佳答案

接受的答案不考虑可能导致问题的前导零

This question回答它。取决于您是想看看它是如何完成的,还是只使用 java 内置方法。以下是从 this 复制的解决方案和 this分别来自提到的 SO 问题的答案。

选项 1:Util 方法

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;
}

选项 2:单线内置

import javax.xml.bind.DatatypeConverter;

public static String toHexString(byte[] array) {
    return DatatypeConverter.printHexBinary(array);
}

public static byte[] toByteArray(String s) {
    return DatatypeConverter.parseHexBinary(s);
}

关于java - 在 Java 中,如何将十六进制字符串转换为字节 []?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8890174/

相关文章:

ColdFusion hmac() 使用 toBase64 和 binaryEncode 返回不同的值

c - 如何将 uint8_t 值数组转换为 C 中的十六进制转储 char 字符串

java - 如何在 java 中将 Collection<char[]> 转换为 char[][]?

java - 无法创建 log4j 日志文件

Java Apache Math Commons 逐元素矩阵乘法

c - 十六进制值的写入顺序错误

javascript - 将 Google 联系人 ID 转换为十六进制以在 URL 中使用

java - 有没有办法使用 Java 从 Azure AD 恢复最近删除的用户?

java - 如何在服务器上获取 Jersey 日志?

不使用打印将ascii转换为十六进制