我試圖將十六進制字符(b8aa30d8f1d398883f0eeb5079777c42)的32字節字符串轉換爲十六進制值的16字節字符串(x'b8aa30d8f1d398883f0eeb5079777c42' )將32字節的十六進制字符串轉換爲16字節的十六進制字符串
我試過了一些我在這裏找到的建議。
StringBuffer sb = new StringBuffer();
for (int i = 0; i < input.length(); i++) {
String s = input.substring(i, i + 2);
byte value = Byte.valueOf(s, 16);
sb.append(value);
}
這導致此異常:值超出範圍。價值:「B8」基數:16
String bin = "";
String binFragment = "";
int iHex;
hex = hex.trim();
hex = hex.replaceFirst("0x", "");
for(int i = 0; i < hex.length(); i++){
iHex = Integer.parseInt(""+hex.charAt(i),16);
binFragment = Integer.toBinaryString(iHex);
while(binFragment.length() < 4){
binFragment = "0" + binFragment;
}
bin += binFragment;
}
這不處理0領先的正確
沒有人有辦法做到這一點的轉換?
我也嘗試這樣的:
public static void convert() {
String s = "0c871eea3af7526f9b2e7054f6277984";
byte[] bytes = DatatypeConverter.parseHexBinary(s);
StringBuilder outputStringBuilder = new StringBuilder();
for (byte currentByte : bytes) {
outputStringBuilder.append((char) currentByte);
}
System.out.println(String.format("%s, %s", bytes, bytes.length));
String out = bytes.toString();
System.out.println(String.format("%s, %s", out, out.length()));
}
並得到了這些結果: [B @ f01a1e,16 [B @ f01a1e,9
有字節數組中的16個字節在創建之前輸出字符串,但只有9個之後。
」十六進制值的字節串「。這沒有意義。 – OldProgrammer
請發佈更多輸入和輸出的例子,字節也是有符號的,所以b8太大而不適合字節 – vandale
'Integer.toBinaryString()'會將整數轉換爲一個零的字符串,它是那個整數的二進制表示。這是你真正想要的嗎?你不會得到一個16字節的字符串,你會得到一個128字節的零和一串字符串。也許你想要將32字節的十六進制字符串轉換爲一個字節數組?這會給你一個16字節的二進制數組。 – Eran