java:将字符串转换为包含每个字符的十六进制数字的字符串

时间:2011-04-12 12:16:01

标签: java hex

我有一个字符串,实际上每个字节都是十六进制数字的表示。

我想创建一个新字符串,其中包含每个字符的实际十六进制数字。

我知道我可以String.getBytes()来获取每个字符的字节,我知道用i=0;i<=String.getBytes().length迭代它。我不明白的是如何创建一个新字符串,每个字符是十六进制数字(0-F)。

谢谢!

3 个答案:

答案 0 :(得分:5)

您可以执行类似

的操作
String test = "hello world", result = "";

for (byte b : test.getBytes())
    result += Integer.toHexString(b) + " ";

System.out.println(result);

// result = 68 65 6c 6c 6f 20 77 6f 72 6c 64 

请记住,Java中的字符串是unicode。

答案 1 :(得分:4)

在你的帖子中有一些误解 - 或者至少是有问题的描述:

  • 字符串由字符组成,而不是字节
  • 数字不是十六进制或十进制等;他们的表示是十六进制等

然后您正在调用String.getBytes(),但目前尚不清楚要使用的编码。如前所述,String是一系列字符。要将其转换为字节,您需要应用编码。不幸的是,String.getBytes()使用“平台默认编码”,这几乎永远是一个不错的选择。您应该始终指定要使用的编码。

将String转换为字节时(如果你肯定想要这样做),很容易将其转换为十六进制:

for (byte b : test.getBytes("UTF-8"))
{
    int x = b & 0xff; // I suspect you don't want negative numbers
    System.out.println(Integer.toHexString(b));
}

或者,您可能希望将每个Unicode 字符转换为其十六进制表示形式:

for (char c : test.toCharArray())
{
    System.out.println(Integer.toHexString(c));
}

请注意,Integer.toHexString不会将其输出填充到特定数量的字符。

如果您可以提供有关输入和预期输出的更多信息,那将非常有用。

答案 2 :(得分:2)

  • commons-codec有Hex.encode(byteArray)
  • 您还可以为每个字节使用Integer.toHexString(..)

获取字节时要小心。使用方法getBytes(ecnoding)而不是没有参数的方法进行平台编码。