尝试将数字转换为十六进制让我陷入困境,看看:
数量: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(正确)
我想更好地了解这种情况,有人能解释一下彼此的不同之处吗(请不要说“因为它调用不同的方法。。。友好)
另外,第一种方法允许我设置字符集,而第二种方法不允许。为什么?
1条答案
按热度按时间exdqitrt1#
归还
getBytes()
方法从字符串中分离该字符串的每个字节,在您的情况下,这些字节将是“3”和“2”。使用打印它们
String.format("%02x", .....
,显示其ascii码的十六进制数。另一方面,
Integer.toHexString(32)
从获取数据toHexString
方法和此方法不分离每个字节,而是以十六进制格式获取数据。