String str = "9B7D2C34A366BF890C730641E6CECF6F";
我想将str
转换成字节数组,但是str.getBytes()
返回的是32个字节而不是16个。
String str = "9B7D2C34A366BF890C730641E6CECF6F";
我想将str
转换成字节数组,但是str.getBytes()
返回的是32个字节而不是16个。
我认为提问者想要将十六进制值的字符串表示转换为表示该十六进制值的字节数组。
Apache Commons-Codec有一个专门用于此目的的类,叫做Hex。
String s = "9B7D2C34A366BF890C730641E6CECF6F";
byte[] bytes = Hex.decodeHex(s.toCharArray());
org.bouncycastle.util.encoders.Hex
可以完成那种工作。 - Timofey Gorshkov现在Java SE 6或Java EE 5提供了一种方法来做到这一点,因此不需要额外的库。
该方法是DatatypeConverter.parseHexBinary
在这种情况下,可以按以下方式使用:
String str = "9B7D2C34A366BF890C730641E6CECF6F";
byte[] bytes = DatatypeConverter.parseHexBinary(str);
该类还提供了许多其他通常用于XML中的格式的类型转换。
使用:
str.getBytes("UTF-16LE");
我知道现在有点晚了,但是希望这能对其他人有所帮助...
以下是我的代码:它将包含在字符串中的两个十六进制表示形式添加到字节数组中。对我来说运行得非常完美。
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;
}
应该就可以了:
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();
}
我猜你需要的是将十六进制字符串转换为字节数组,使其与该十六进制字符串具有相同的含义?添加以下方法即可完成,无需导入任何额外的库:
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;
}
试试这个:
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++;
}