Java 将32字节的十六进制字符串转换为十六进制值的16字节字符串

Java 将32字节的十六进制字符串转换为十六进制值的16字节字符串,java,hex,Java,Hex,我正在尝试将32字节的十六进制字符字符串(B8AA30D8F1D398883F0EEB507977C42)转换为16字节的十六进制值字符串(x'B8AA30D8F1D398883F0EEB507977C42') 我已经尝试了我在这里找到的一些建议 StringBuffer sb = new StringBuffer(); for (int i = 0; i < input.length(); i++) { String s = input.substring

我正在尝试将32字节的十六进制字符字符串(B8AA30D8F1D398883F0EEB507977C42)转换为16字节的十六进制值字符串(x'B8AA30D8F1D398883F0EEB507977C42')

我已经尝试了我在这里找到的一些建议

    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);
    }
得到了这些结果: [B@f01a1e, 16 [B@f01a1e,9


在创建输出字符串之前,字节数组中有16个字节,但在创建输出字符串之后只有9个。

如果我理解正确,您正在尝试将字节序列(以十六进制表示法作为字符串)转换为相应的字符

您可以使用该类将十六进制字符串转换为字节数组

byte[] bytes = DatatypeConverter.parseHexBinary(inputString);
…并将每个字节转换为它所代表的字符:

StringBuilder outputStringBuilder = new StringBuilder();
for (byte currentByte : bytes) {
    outputStringBuilder.append((char) currentByte);
}

第二次尝试的问题是一次读取两个十六进制字符(这是正确的,因为每对十六进制字符都是一个字节),但是循环条件和增量是错误的

试试这个:

StringBuilder sb = new StringBuilder ();
for (int i = 0; i < input.length()/2; i+=2) {
    String s = input.substring(i, i + 2);       
    byte value = Byte.valueOf(s, 16);
                   sb.append(value);
}
StringBuilder sb=新的StringBuilder();
对于(int i=0;i

此外,您还应该检查输入是否有偶数个十六进制字符。

“十六进制值的字节字符串”。这没有意义。请发布更多输入和输出示例。字节也有符号,因此b8太大,无法放入字节
整数。toBinaryString()
将整数转换为一个由0和1组成的字符串,这是该整数的二进制表示形式。这是您真正想要的吗?您不会得到一个16字节的字符串,而是一个由128字节的0和1组成的字符串。也许您想将32字节的十六进制字符串转换为一个字节数组?这将为您提供一个16字节的二进制数组s、 请不要使用StringBuffer,因为您可以使用StringBuilder。标题令人困惑。您真正想问的是“如何将数字从32个字符的十六进制字符串转换为16个元素的byte[]数组?”为此,我认为您可能应该使用ByteBuffer类,它是java.nio库的一部分。这会产生垃圾(
ᄌᆰ0￘￱ᅮリネ?→Pyw | B
)以供您输入,因此我不确定您是否试图实现其他目标。
StringBuilder outputStringBuilder = new StringBuilder();
for (byte currentByte : bytes) {
    outputStringBuilder.append((char) currentByte);
}
StringBuilder sb = new StringBuilder ();
for (int i = 0; i < input.length()/2; i+=2) {
    String s = input.substring(i, i + 2);       
    byte value = Byte.valueOf(s, 16);
                   sb.append(value);
}