如何解决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
方法获取数据,并且该方法不会分隔每个字节并以十六进制格式获取数据。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。