我使用以下方法将16位转换为有符号小数:
(short) Integer.parseInt("1110111100001010", 2))
问题是我有24位要转换成有符号的十进制。
使用没有大小限制的BigInteger。意味着无论二进制字符串有多大,都不会丢失任何数据。
为了让它签名,我指的是这里讨论的一个简单技巧:正在将带符号的二进制字符串转换为两个';s对int的补码?
这里有两种方法:一种用于int,另一种用于BigInt
public static String generateKString(String binary){
// k is the smallest positive number the actual binary scheme cannot represent
// for 1101 it is 1000
String kStr = "1";
for(int i = 1; i < binary.length(); i++)
kStr += "0";
return kStr;
}
public static BigInteger convertSignedBigInt(String binary){
BigInteger bInt = new BigInteger(binary, 2);
String kStr = generateKString(binary);
BigInteger k = new BigInteger(kStr, 2);
if (bInt.compareTo(k) == 1) bInt = bInt.subtract(k.multiply(new BigInteger("2")));
return bInt;
}
public static int convertSignedInt(String binary){
int i = Integer.parseInt(binary, 2);
String kStr = generateKString(binary);
int k = Integer.parseInt(kStr, 2);
if (i >= k) i -= 2 * k;
return i;
}