Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:将数字和字符串转换为十六进制将返回不同的结果。为什么?_Java_Hex_Ascii_Primitive_Primitive Types - Fatal编程技术网

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

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

尝试将数字转换为十六进制让我陷入困境,请看:

电话: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(正确)

我想更好地了解这种情况,有人能解释一下彼此的不同之处吗?(请不要说“因为它调用不同的方法…友好一些”)

另外,第一种方法允许我设置字符集,而第二种方法不允许。为什么?

从字符串返回
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)如何知道应该使用哪个字符集?如果我需要另一个字符集怎么办?