我有一个字符串,实际上每个字节都是十六进制数字的表示。
我想创建一个新字符串,其中包含每个字符的实际十六进制数字。
我知道我可以String.getBytes()
来获取每个字符的字节,我知道用i=0;i<=String.getBytes().length
迭代它。我不明白的是如何创建一个新字符串,每个字符是十六进制数字(0-F)。
谢谢!
答案 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)
Hex.encode(byteArray)
Integer.toHexString(..)
获取字节时要小心。使用方法getBytes(ecnoding)
而不是没有参数的方法进行平台编码。