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

在Java中,如何将十六进制字符串转换为字节[]?,java,hex,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) { st

我在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();
}

<>我可以从<代码>(2)<代码>到<代码>(3)< /代码>,但是我该如何从<代码>(3)< /代码>返回到<代码>(2)< /> >

<强>接受的答案不考虑前导零,这可能导致问题>/P> 回答它。这取决于您是想看看它是如何完成的,还是只想使用java内置方法。以下是从上述问题中复制的解决方案和答案

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

我发现DatatypeConverter.parseHexBinary的成本比:


aa到Ra。一部没有卡马尔·切赫的电影。你可以加入我的聊天室什么是后字节数组?这与字节数组不同吗?如何将二进制/字节字符串转换为十六进制?您的回答帮助了我,感谢+1+1使用Java已经提供的类提供了一行程序选项。对于字符串
56276BE1
,它给了我
86、39、107、-31的字节。但另一个用C#编写的应用程序为相同的十六进制字符串提供了
86、39、107、225
。哪一个是正确的?两个都是正确的。C#处理字节的方式与Java不同。在Java中,字节值介于-127和127之间,而C#的值介于0到255之间。不过,在Java 9上,内置的一行代码似乎不再那么内置了,因为简单地导入
javax.xml.bind.DatatypeConverter
不起作用。这并没有给出我想要的结果,但是dARKpRINCE的响应中的简单的一行方法做到了当我必须将原始数据类型传递给Oracle sprocThe
新的BigInteger(s,16).toByteArray()时,这就起作用了不正确。我输入一个34长度的十六进制字符串,输出一个18长度的字节。我想要的是一个17字节的长度,我认为这有时会给出错误的结果。例如,它为A85565ED63B893F5A3EF85D88819D484提供了17个字节。但是它应该是16 bytest,它给出了错误的结果;DarkPrince“util方法”对我来说是正确的。这比DatatypeConverter成本更高,因为Apache commons是一个附加库(依赖项、大小等),而DatatypeConverter是JDK的一部分。
 String s="f263575e7b00a977a8e9a37e08b9c215feb9bfb2f992b2b8f11e";
 byte[] b = new BigInteger(s,16).toByteArray();
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;
}
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);
}
org.apache.commons.codec.binary.Hex(str.toCharArray())