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

ijxebb2r  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(320)

尝试将数字转换为十六进制让我陷入困境,看看:
数量: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(正确)
我想更好地了解这种情况,有人能解释一下彼此的不同之处吗(请不要说“因为它调用不同的方法。。。友好)
另外,第一种方法允许我设置字符集,而第二种方法不允许。为什么?

exdqitrt

exdqitrt1#

归还 getBytes() 方法从字符串中分离该字符串的每个字节,在您的情况下,这些字节将是“3”和“2”。
使用打印它们 String.format("%02x", ..... ,显示其ascii码的十六进制数。
另一方面, Integer.toHexString(32) 从获取数据 toHexString 方法和此方法不分离每个字节,而是以十六进制格式获取数据。

相关问题