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

问题描述 投票:33回答:8
String str = "9B7D2C34A366BF890C730641E6CECF6F";

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

java arrays string bytearray
8个回答
53
投票

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

[Apache Commons编解码器为此提供一个类,Hex

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

37
投票

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

方法为DatatypeConverter.parseHexBinary

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

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

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


6
投票

用途:

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

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

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

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

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

0
投票

这对我有用:

public static byte[] hexToByteData(String hex)
{
    byte[] convertedByteArray = new byte[hex.length()/2];
    int count  = 0;

    for( int i = 0; i < hex.length() -1; i += 2 )
    {
        String output;
        output = hex.substring(i, (i + 2));
        int decimal = (int)(Integer.parseInt(output, 16));
        convertedByteArray[count] =  (byte)(decimal & 0xFF);
        count ++;
    }
    return convertedByteArray;
}
© www.soinside.com 2019 - 2024. All rights reserved.