Java:将数字和字符串转换为十六进制会返回不同的结果.为什么



试图将数字转换为十六进制让我陷入困境,看看:

编号:32

应为十六进制(ASCII(:20

来自字符串形式的数字的结果:

System.out.println(String.format("%02x", new BigInteger(1, "32".getBytes(StandardCharsets.US_ASCII))));

结果是给我33 32(我理解这是因为它解析了3(=33(和2(=32((

结果转换为数字:

System.out.println(Integer.toHexString(32));

给我20(正确(

我想更好地理解这种情况,有人能解释一下彼此之间的区别吗?(请不要说"因为它调用不同的方法……要友好"(

此外,第一种方法允许我设置Charset,而第二种方法则不允许。为什么?

从String返回getBytes()方法,分离该String的每个字节,在您的情况下,这些字节将是'3'和'2'。

使用String.format("%02x", .....打印它们显示了它们的ASCII代码的十六进制数。

另一方面,Integer.toHexString(32)toHexString方法中获取数据,该方法不分离每个字节,而是以十六进制格式获取数据。

最新更新