我有一个字符串数组,这些字符串数组表示二进制数(没有前导零),我希望将它们转换为相应的基数10数。考虑一下:
binary 1011 becomes integer 11
binary 1001 becomes integer 9
binary 11 becomes integer 3 etc.
最好的方法是什么?我一直在探索java.lang.number.*,但没有找到直接转换方法。Integer.parseInt(b)
产生一个等于字符串的整数...例如,1001变成1,001,而不是9...and似乎不包括输出基的参数。toBinaryString
在错误的方向上进行转换。我怀疑我需要进行多步转换,但似乎找不到正确的方法或子类组合。我也不确定前导零或缺少前导零会在多大程度上成为一个问题。谁有什么好的方向给我指路吗?
发布于 2012-04-17 01:47:24
你需要使用specify the radix。有一个过载的Integer#parseInt()
,它允许您。
int foo = Integer.parseInt("1001", 2);
发布于 2012-04-17 01:56:34
这可能会起作用:
public int binaryToInteger(String binary) {
char[] numbers = binary.toCharArray();
int result = 0;
for(int i=numbers.length - 1; i>=0; i--)
if(numbers[i]=='1')
result += Math.pow(2, (numbers.length-i - 1));
return result;
}
发布于 2014-04-15 23:58:54
int foo = Integer.parseInt("1001", 2);
如果您处理的是正数,则工作得很好,但如果您需要处理有符号的数字,则可能需要对字符串进行符号扩展,然后将其转换为Int
public class bit_fun {
public static void main(String[] args) {
int x= (int)Long.parseLong("FFFFFFFF", 16);
System.out.println("x =" +x);
System.out.println(signExtend("1"));
x= (int)Long.parseLong(signExtend("1"), 2);
System.out.println("x =" +x);
System.out.println(signExtend("0"));
x= (int)Long.parseLong(signExtend("0"), 2);
System.out.println("x =" +x);
System.out.println(signExtend("1000"));
x= (int)Long.parseLong(signExtend("1000"), 2);
System.out.println("x =" +x);
System.out.println(signExtend("01000"));
x= (int)Long.parseLong(signExtend("01000"), 2);
System.out.println("x =" +x);
}
private static String signExtend(String str){
//TODO add bounds checking
int n=32-str.length();
char[] sign_ext = new char[n];
Arrays.fill(sign_ext, str.charAt(0));
return new String(sign_ext)+str;
}
}
output:
x =-1
11111111111111111111111111111111
x =-1
00000000000000000000000000000000
x =0
11111111111111111111111111111000
x =-8
00000000000000000000000000001000
x =8
我希望这对你有帮助!
https://stackoverflow.com/questions/10178980
复制相似问题