问题描述
尝试将数字转换为十六进制使我陷入困境,看看:
数字: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
方法获取数据,并且该方法不会分隔每个字节并以十六进制格式获取数据。