【发布时间】:2015-03-20 08:09:04
【问题描述】:
我正在使用十六进制值,我需要保留值的符号。我想知道是否有人有创造性的方法来保留 int 的符号而不使用BigInteger?我不能使用BigInteger,因为由于大小限制,它不在我的库中;我的程序在嵌入式环境中运行。
我有一串十六进制值,如下所示:
55844d000000000080027d801cf6380006f416c0c23d3e4000000000
String ssumI = null;
String ssumQ = null;
String sazI = null;
float isumI = 0;
float isumQ = 0;
float iazI = 0;
ssumI = data.substring(0,8);
isumI = (float)(Integer.parseInt(ssumI, 16)/Math.pow(2,bits));
//55844d00 parses fine
ssumQ = data.substring(8,16);
isumQ = (float)(Integer.parseInt(ssumQ, 16)/Math.pow(2,bits));
//00000000 parses fine
sazI = data.substring(16, 24);
iazI = (float)(Integer.parseInt(sazI, 16)/Math.pow(2,bits));
//80027d80 fails - NumberFormatException
//should be -1,036,173,760 and in the int range
我没有正确理解失败吗?似乎失败是由于设置了符号位。
【问题讨论】:
-
BigInteger 是显而易见的解决方案 - 那么为什么不使用它呢?
-
由于大小限制,它不在我的库中,我的程序在嵌入式环境中运行
-
对,所以你应该把它放在你的问题中。任何时候由于您处于不寻常的上下文中而导致明显的解决方案不合适时,您都应该解释该上下文。
-
除非 bits 是浮点值或大于 31,否则使用
1 << bits而不是Math.pow(2,bits)