Java:将数字和字符串转换为十六进制将返回不同的结果。为什么?
尝试将数字转换为十六进制让我陷入困境,请看: 电话:32 预期十六进制(ASCII):20 以字符串形式出现的数字的结果:Java:将数字和字符串转换为十六进制将返回不同的结果。为什么?,java,hex,ascii,primitive,primitive-types,Java,Hex,Ascii,Primitive,Primitive Types,尝试将数字转换为十六进制让我陷入困境,请看: 电话: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.printl
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(正确)
我想更好地了解这种情况,有人能解释一下彼此的不同之处吗?(请不要说“因为它调用不同的方法…友好一些”)
另外,第一种方法允许我设置字符集,而第二种方法不允许。为什么?从字符串返回getBytes()
方法,将该字符串的每个字节分隔开来,在您的情况下,该字符串的每个字节都是“3”和“2”
使用String.format(“%02x”,…
)打印它们时,将显示其ASCII代码的十六进制数
另一方面,Integer.toHexString(32)
从toHexString
方法中获取数据,此方法不会分离每个字节并以十六进制格式获取数据。从字符串返回getBytes()
方法时,会分离该字符串中的每个字节,在您的情况下,这些字节是“3”和“2”
使用String.format(“%02x”,…
)打印它们时,将显示其ASCII代码的十六进制数
另一方面,
Integer.toHexString(32)
从toHexString
方法中获取数据,该方法不会分离每个字节并以十六进制格式获取数据。听起来您理解其中的区别:“32“为'3'提供ASCII,然后为'2'提供ASCII。32本身就提供了一个不同的值。听起来您似乎已经理解了它。是的,但如果ASCII表中没有32个数字,那么toHexString()如何转换它?字符集呢?我觉得我没有理解所有内容…Integer.toHexString(32)
与ASCII无关。它只是将数字32转换为十六进制。“32”。getBytes(US\u ASCII)
使用ASCII表将3
转换为一个字节,然后将2
转换为一个字节。那么你是说ASCII仅对转换字符串有效?ASCII不适用于数字?我仍然不理解LOLYes。这正是问题所在。ASCII是字符串转换为数字的一种方式。听起来你理解了不同之处e:“32”给出了“3”的ASCII,然后“2”的ASCII给出了不同的值。32本身就给出了一个不同的值。听起来您已经理解了。是的,但是如果ASCII表中没有32个数字,那么toHexString()如何转换它呢?字符集呢?我觉得我没有理解所有内容…Integer.toHexString(32)
与ASCII无关。它只是将数字32转换为十六进制。“32”。getBytes(US\u ASCII)
使用ASCII表将3
转换为一个字节,然后将2
转换为一个字节。那么你是说ASCII仅对转换字符串有效?ASCII不适用于数字?我仍然不理解LOLYes。这正是重点。ASCII是字符串转换为数字的一种方式。但我仍然对字符集以及如何转换字符集感到困惑Integer.TohextString(32)知道应该使用哪个字符集吗?如果我需要另一个字符集怎么办?但我仍然对字符集感到困惑,Integer.TohextString(32)如何知道应该使用哪个字符集?如果我需要另一个字符集怎么办?