我想知道是否可以将带符号的十六进制(负数)转换为相应的十进制值。
答案 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(...)
。