繁体   English   中英

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

[英]java: convert a string to a string that contains the hex number of each character

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

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

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

谢谢!

你可以做类似的事情

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.getBytes() ,但尚不清楚您要使用哪种编码。 如前所述,String是一个字符序列。 要将其转换为bytes ,您需要应用编码。 不幸的是, 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不会将其输出填充到特定数量的字符。

如果您可以提供有关您的输入和预期输出的更多信息,那将真正有帮助。

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

获取字节时请小心。 使用方法getBytes(ecnoding)代替不带参数的方法,该方法采用平台编码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM