将字符串转换为整数十六进制值“奇怪”行为

时间:2010-12-04 20:17:39

标签: java

我注意到java不允许我存储大数字等 2000000000,即明显为整数类型的20亿,但如果我存储相应的十六进制值,即int largeHex = 0x77359400;这很好,

所以我的程序需要增加到2 ^ 32,刚刚超过42亿,我测试了十六进制密钥0xffffffff,它允许我以这种形式存储为int类型,

我的问题是我必须从程序中提取一个十六进制字符串。

示例

sT = "ffffffff";

int hexSt = Integer.valueOf(sT, 16).intValue();

这仅适用于较小的整数值

我收到错误

Exception in thread "main" java.lang.NumberFormatException: For input string: "ffffffff"

我需要做的就是在整数变量中使用此值,例如

int largeHex = 0xffffffff

工作得很好?

我正在使用整数,因为我的程序需要生成许多值。

6 个答案:

答案 0 :(得分:6)

String hex = "FFFFFFFF"; // or whatever... maximum 8 hex-digits
int i = (int) Long.parseLong(hex, 16);

将结果作为带符号的int ...

答案 1 :(得分:3)

嗯,似乎没有什么可以添加到答案中,但值得澄清一下:

  • 它会在解析时抛出异常,因为ffffffff对于整数来说太大了。考虑Integer.parseInt(""+Long.MAX_VALUE);,不使用十六进制表示。这里抛出了同样的异常。
  • int i = 0xffffffff;i设置为-1
  • 如果您已经决定使用long而不是整数,请注意long l = 0xffffffff;也会将l设置为-1,因为0xffffffff被视为int。正确的表单是long l = 0xffffffffL;

答案 2 :(得分:2)

如何使用:


System.out.println(Long.valueOf("ffffffff", 16).longValue());

哪个输出:

4294967295

答案 3 :(得分:2)

正在签名的int数据类型将存储最多约2 ^ 31的值,这只是您需要的一半。但是,您可以使用64位长的long将值存储到大约2 ^ 63。

希望这会通过十六进制值来规避整个问题=)

答案 4 :(得分:0)

答案 5 :(得分:0)

int test = 0xFFFFFF; int test2 = Integer.parseInt(Integer.toHexString(test),16);

^ ---按预期工作......但是:

int test = 0xFFFFFFFF; int test2 = Integer.parseInt(Integer.toHexString(test),16);

^ - 抛出数字格式异常。

int test = 0xFFFFFFFF; int test2 =(int)Long.parseLong(Integer.toHexString(test),16);

^ - 工作正常。