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

java:将字符串转换为包含每个字符十六进制数的字符串,java,hex,Java,Hex,我有一个字符串,实际上它的每个字节都表示一个十六进制数 我想创建一个新字符串,其中包含每个字符的实际十六进制数 我知道我可以做String.getBytes()来获取每个字符的字节,我知道用I=0迭代它;我你可以这样做 String test = "hello world", result = ""; for (byte b : test.getBytes()) result += Integer.toHexString(b) + " "; System.out.println(re

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

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


我知道我可以做
String.getBytes()
来获取每个字符的字节,我知道用
I=0迭代它;我你可以这样做

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格式的。

您可以执行以下操作

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格式的。

  • commons编解码器具有
    Hex.encode(byteArray)
  • 您还可以对每个字节使用
    Integer.toHexString(..)
获取字节时要小心。使用方法
getBytes(ecnoding)
而不是采用平台编码的无参数方法。

  • commons编解码器具有
    Hex.encode(byteArray)
  • 您还可以对每个字节使用
    Integer.toHexString(..)

获取字节时要小心。使用
getBytes(ecnoding)
方法,而不是采用平台编码的无参数方法。

您的帖子中有一些误解,或者至少有一些问题:

  • 字符串由字符组成,而不是字节
  • 数字不是十六进制或十进制等;他们的表述是十六进制等
然后调用
String.getBytes()
,但不清楚要使用什么编码。如前所述,字符串是一个字符序列。要将其转换为字节,需要应用编码。不幸的是,
String.getBytes()
使用“平台默认编码”,这几乎不是一个好的选择。您应该始终指定要使用的编码

当您将字符串转换为字节(如果您确实想这样做)时,很容易将其转换为十六进制:

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
不会将其输出填充到特定数量的字符


如果你能提供更多关于你的输入和预期输出的信息,那将非常有帮助。

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

  • 字符串由字符组成,而不是字节
  • 数字不是十六进制或十进制等;他们的表述是十六进制等
然后调用
String.getBytes()
,但不清楚要使用什么编码。如前所述,字符串是一个字符序列。要将其转换为字节,需要应用编码。不幸的是,
String.getBytes()
使用“平台默认编码”,这几乎不是一个好的选择。您应该始终指定要使用的编码

当您将字符串转换为字节(如果您确实想这样做)时,很容易将其转换为十六进制:

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
不会将其输出填充到特定数量的字符


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

我不想使用System.out。println@ufk:那只是一个例子。正如我所说,如果你能提供更多关于你真正想要达到的目标的细节,我们可以给你一个更好的答案。嗨!谢谢你的帮助。一般来说,我想要的是将每个字节转换为它的十六进制表示形式。一般来说,我想要的是Hex.encodeHexString()在Bozho提供的答案中所做的。@ufk:字符串不是由字节组成的,而是由字符组成的。了解其中的区别非常重要。我不想使用System.out。println@ufk:那只是一个例子。正如我所说,如果你能提供更多关于你真正想要达到的目标的细节,我们可以给你一个更好的答案。嗨!谢谢你的帮助。一般来说,我想要的是将每个字节转换为它的十六进制表示形式。一般来说,我想要的是Hex.encodeHexString()在Bozho提供的答案中所做的。@ufk:字符串不是由字节组成的,而是由字符组成的。理解其中的差异非常重要。