0

我正在尝试将 2 个十六进制值相乘并接收一个十六进制值作为输出。我目前采用包含十六进制值的字符串,将其转换为整数进行乘法,然后将其转换回十六进制字符串。

这是十进制乘法(以 10 为底)的示例。

//this works for all cases
//operand1, operand2 & displayValue are strings that should be any value from 0-F
long solutionInt = 0;
int currentBase = 10;
solutionInt = Integer.parseInt(operand1, currentBase) * Integer.parseInt(operand2, currentBase);
displayValue = Integer.toString(Integer.valueOf(Long.toString(solutionInt)).intValue());

这是我遇到麻烦的地方,以十六进制乘法(以 16 为基数)

//this does NOT work for larger numbers (that would overflow)
//operand1, operand2 & displayValue are strings that should be and value from 0-F               
long solutionInt = 0;
int currentBase = 16;           
solutionInt = Integer.parseInt(operand1, currentBase) * Integer.parseInt(operand2, currentBase);
displayValue = Integer.toHexString(Integer.valueOf(Long.toString(solutionInt)).intValue());

当乘以会导致溢出的较大十六进制值(即:0xFFFFFFFF * 0xFFFFFFF)时,我的 android 应用程序崩溃并且我收到以下错误:

FATAL EXCEPTION: main
java.lang.IllegalStateException: Could not execute method of the activity

我需要displayValue保存一个十六进制字符串(如果转换为数字),其大小为 int。我不确定是否存在某种溢出导致此错误,或者其他与 android 中的活动有关的东西。

4

1 回答 1

0

为什么不使用 BigDecimal。可以从十六进制字符串构造一个大十进制,然后使用多重方法。

http://www.velocityreviews.com/forums/t126470-no-hexadecimal-parsing-formatting-for-biginteger.html

于 2013-08-26T00:45:10.603 回答