十六进制编码的字符串到字节数组

时间:2011-07-11 13:16:39

标签: java arrays string bytearray

String str = "9B7D2C34A366BF890C730641E6CECF6F";

我想将str转换为字节数组,但str.getBytes()返回32个字节而不是16个字节。

7 个答案:

答案 0 :(得分:52)

我认为提问者将十六进制值的字符串表示形式转换为表示该十六进制值的字节数组。

apache commons-codec有一个类Hex

String s = "9B7D2C34A366BF890C730641E6CECF6F";    
byte[] bytes = Hex.decodeHex(s.toCharArray());

答案 1 :(得分:36)

Java SE 6或Java EE 5现在提供了一种方法,因此不需要额外的库。

该方法为DatatypeConverter.parseHexBinary

在这种情况下,可以按如下方式使用:

String str = "9B7D2C34A366BF890C730641E6CECF6F";
byte[] bytes = DatatypeConverter.parseHexBinary(str);

该类还为XML中通常使用的许多其他格式提供类型转换。

答案 2 :(得分:6)

使用:

str.getBytes("UTF-16LE");

答案 3 :(得分:1)

我知道它已经很晚了,但希望它会帮助别人......

这是我的代码:它包含String中包含的两个二进制十六进制表示,并将它们添加到字节数组中。 它对我来说很完美。

public byte[] stringToByteArray (String s) {
    byte[] byteArray = new byte[s.length()/2];
    String[] strBytes = new String[s.length()/2];
    int k = 0;
    for (int i = 0; i < s.length(); i=i+2) {
        int j = i+2;
        strBytes[k] = s.substring(i,j);
        byteArray[k] = (byte)Integer.parseInt(strBytes[k], 16);
        k++;
    }
    return byteArray;
}

答案 4 :(得分:0)

应该这样做:

byte[] bytes = toByteArray(Str.toCharArray());

public static byte[] toByteArray(char[] array) {
    return toByteArray(array, Charset.defaultCharset());
}

public static byte[] toByteArray(char[] array, Charset charset) {
    CharBuffer cbuf = CharBuffer.wrap(array);
    ByteBuffer bbuf = charset.encode(cbuf);
    return bbuf.array();
}

答案 5 :(得分:0)

试试这个:

     String str = "9B7D2C34A366BF890C730641E6CECF6F";
     String[] temp = str.split(",");
     bytesArray = new byte[temp.length];
     int index = 0;
     for (String item: temp) {
     bytesArray[index] = Byte.parseByte(item);
     index++;
     }

答案 6 :(得分:0)

我假设你需要的是将十六进制字符串转换为一个等于那个意味着与十六进制字符串相同的字节数组? 添加此方法应该为您完成,无需任何额外的库导入:

public static byte[] hexToByteArray(String s) {
     String[] strBytes = s.split("(?<=\\G.{2})");
     byte[] bytes = new byte[strBytes.length];
     for(int i = 0; i < strBytes.length; i++)
         bytes[i] = (byte)Integer.parseInt(strBytes[i], 16);
     return bytes;
}