打印十六进制字符串的地址而不是十六进制字符串值

时间:2014-04-17 09:00:29

标签: java string forms printing hex

我通过执行

将字节数组转换为字符串
String s = encryptedBytes1.toString();
String gh = convertStringToHex(s);

然后我在屏幕gh上打印,这是它返回的十六进制形式:

gh:[B@5985910 

这是函数convert

public static String convertStringToHex(String str){
    char[] chars = str.toCharArray();
    StringBuffer hex = new StringBuffer();
    for(int i = 0; i < chars.length; i++){
        hex.append(Integer.toHexString((int)chars[i]));
    }
    return hex.toString();
}

任何人都可以帮我打印十六进制表单字符串吗?

2 个答案:

答案 0 :(得分:2)

通常,您可以使用以下函数转换字符串和十六进制值(数字):

String hexString1 = "0x20";
Integer integer = Integer.decode(hexString); // is 32
String hexString1 = String.toHexString(integer); // is "20"

现在你需要迭代你的byteArray / String。

编辑:在您指定问题时,请在SO上查看此答案。我想这是同样的问题:Converting A String To Hexadecimal In Java

答案 1 :(得分:0)

encryptedBytes1.toString()为您提供object的字符串表示形式,因为所有数组都是Java中的对象,它不会将字节数组转换为字符串。

我认为您没有正确地将字节数组转换为String。这适合我。

    byte encryptedBytes1[] = "ABCDEFGHIK".getBytes();
    String aux = new String(encryptedBytes1);
    System.out.println(convertStringToHex(aux));

41 42 43 44 45 46 47 48 49 4b

  • 请记住,您可能需要指定一个字符集,并且primitive数据字节需要1个字节,而char(意味着包含Unicode字符)需要2个。
相关问题