_String str = "9B7D2C34A366BF890C730641E6CECF6F";
_
str
をバイト配列に変換したいのですが、str.getBytes()
は16バイトではなく32バイトを返します。
質問者は、16進値の文字列表現を、その16進値を表すバイト配列に変換していると思います。
Apache commons-codecには、そのためのクラス Hex があります。
String s = "9B7D2C34A366BF890C730641E6CECF6F";
byte[] bytes = Hex.decodeHex(s.toCharArray());
Java SE 6またはJava EE 5はこれを行うためのメソッドを提供しているため、追加のライブラリは必要ありません。
メソッドは DatatypeConverter.parseHexBinary です。
この場合、次のように使用できます。
String str = "9B7D2C34A366BF890C730641E6CECF6F";
byte[] bytes = DatatypeConverter.parseHexBinary(str);
このクラスは、XMLで一般的に使用される他の多くの形式の型変換も提供します。
つかいます:
str.getBytes("UTF-16LE");
私はそれが遅れていることを知っていますが、それが他の誰かを助けることを願っています...
これは私のコードです:Stringに含まれる2 x 2の16進表現を取り、それらをバイト配列に追加します。それは私にとって完璧に機能します。
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;
}
これを試して:
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++;
}
あなたが必要なのは、16進文字列を、その16進文字列と同じことを意味するバイト配列に変換することだと思いますか?このメソッドを追加すると、追加のライブラリをインポートすることなく、自動的に実行されます。
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;
}
それはトリックを行う必要があります:
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();
}