JAVA:输入是字符串表示的十六进制数字,例如“0xaf12”。任务是将这个数的值添加到数组(int)中

问题描述 投票:0回答:1

问题是我无法获取这个十六进制数的 int 值并将其以十六进制形式放在那里。 但是,如果我将其转换为十进制值,则从“0x8000_0000”开始的所有值都不会解析为 int,因为这些值超出了 int。如果我解析 Long,则会获得无符号的巨大数字,而我不需要这样的数字 - 我需要 int 范围内的有符号数字。

我尝试这样做,我认为这是正确的,因为我检查的一些示例都是正确的,但作业的测试表明它不正确。但我没有看到错误出现的数字。

long b = Long.parseLong("ffffffff", 16); System.out.println((int) (Integer.MIN_VALUE + (b - Integer.MAX_VALUE - 1)));

我还在互联网上看到,您可以通过位移来尝试某种方式,但我没有发现该信息对我的任务有任何用处。

java parsing integer numbers hex
1个回答
0
投票

那么所有从“0x8000_0000”开始的值都不会被解析为int

因为

0x8000_0000
Integer.MAX_VALUE + 1
。显然,超过最大可能的
1
int
无法存储在
int
中。如果您需要支持任意值,请使用
BigInteger

String s = "0x8000_0000";
BigInteger bi = new BigInteger(s.substring(2).replaceAll("_", ""), 16);
System.out.println(bi.subtract(BigInteger.valueOf(Integer.MAX_VALUE)));

输出

1
© www.soinside.com 2019 - 2024. All rights reserved.