无法将所有十六进制值转换为二进制

时间:2018-01-23 08:52:47

标签: java integer

Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
System.out.println(input);
int a = Integer.parseInt(input.substring(2), 16);
System.out.println(Integer.toBinaryString(a));

上面提到的代码,它接受十六进制值并将其转换为二进制。但是,这不适用于输入" 0xBE400000"但它适用于" 0x41C20000"

3 个答案:

答案 0 :(得分:9)

BE400000大于Integer.MAX_VALUE(其十六进制表示为7FFFFFFF)。

因此,您需要使用

解析它
long a = Long.parseLong(input.substring(2), 16);

答案 1 :(得分:3)

您可以使用Long

long l = Long.parseLong(input.substring(2), 16);

但如果您的值大于2 ^ 63 - 1,您可以使用BigInteger的构造函数:

  

BigInteger(String val,int radix)   将指定基数中BigInteger的String表示形式转换为BigInteger。

BigInteger b = new BigInteger(input.substring(2), 16);

答案 2 :(得分:3)

由于0xBE400000在unsigned int范围内,您可以使用:parseUnsignedInt(String s, int radix)

int a = Integer.parseUnsignedInt(input.substring(2), 16);

使用parseUnsignedInt(input, 16),您可以解析从0x000000000xFFFFFFFF的值,其中:

  • 0x00000000 = 0
  • 0x7FFFFFFF = 2147483647(Integer.MAX_VALUE)
  • 0x80000000 = -2147483648(Integer.MIN_VALUE)
  • 0xFFFFFFFF = -1
  • 0xBE400000 = -1103101952