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

问题描述

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

数字:32

期望的十六进制(ASCII):20

以数字形式出现的数字结果:

WARNING: Could not store access token in cache: disk I/O error
[Step 1/1] ERROR: gcloud crashed (OperationalError): disk I/O error

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

结果转换为数字:

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

给我20个(正确)

我想更好地了解这种情况,有人可以解释一下彼此之间的不同吗? (请不要说“因为它调用了不同的方法...要友好”)

此外,第一种方法让我设置字符集,而第二种方法则没有。为什么?

解决方法

从字符串中返回getBytes()方法,将该字符串的每个字节分开,在您的情况下为'3'和'2'。

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

另一方面,Integer.toHexString(32)toHexString方法获取数据,并且该方法不会分隔每个字节并以十六进制格式获取数据。