在Java中将十六进制签名为十进制

时间:2016-06-20 08:39:00

标签: java math hex

我想知道是否可以将带符号的十六进制(负数)转换为相应的十进制值。

1 个答案:

答案 0 :(得分:3)

我假设您在String中拥有十六进制值。

方法parseInt(String s, int radix)可以采用十六进制(带符号)字符串,并使用正确的基数(16)将其解析为整数。

int decimalInt = parseInt(hexaStr, 16);

上面的解决方案只有在你有像-FFAA07BB这样的数字时才有效...如果你想要两个补码,你必须自己转换它。

String hex = "F0BDC0";

// First convert the Hex-number into a binary number:
String bin = Integer.toString(Integer.parseInt(hex, 16), 2);

// Now create the complement (make 1's to 0's and vice versa)
String binCompl = bin.replace('0', 'X').replace('1', '0').replace('X', '1');

// Now parse it back to an integer, add 1 and make it negative:
int result = (Integer.parseInt(binCompl, 2) + 1) * -1;

或者如果你想要一个单行:

int result = (Integer.parseInt(Integer.toString(Integer.parseInt("F0BDC0", 16), 2).replace('0', 'X').replace('1', '0').replace('X', '1'), 2) + 1) * -1;

如果数字变得那么大(或很小),那么整数就会溢出,请改用Long.toString(...)Long.parseLong(...)