首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java中将二进制字符串转换为以10为基数的整数

如何在Java中将二进制字符串转换为以10为基数的整数
EN

Stack Overflow用户
提问于 2012-04-17 01:45:39
回答 11查看 232.8K关注 0票数 132

我有一个字符串数组,这些字符串数组表示二进制数(没有前导零),我希望将它们转换为相应的基数10数。考虑一下:

代码语言:javascript
复制
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在错误的方向上进行转换。我怀疑我需要进行多步转换,但似乎找不到正确的方法或子类组合。我也不确定前导零或缺少前导零会在多大程度上成为一个问题。谁有什么好的方向给我指路吗?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2012-04-17 01:47:24

你需要使用specify the radix。有一个过载的Integer#parseInt(),它允许您。

代码语言:javascript
复制
int foo = Integer.parseInt("1001", 2);
票数 330
EN

Stack Overflow用户

发布于 2012-04-17 01:56:34

这可能会起作用:

代码语言:javascript
复制
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;
}
票数 24
EN

Stack Overflow用户

发布于 2014-04-15 23:58:54

代码语言:javascript
复制
int foo = Integer.parseInt("1001", 2);

如果您处理的是正数,则工作得很好,但如果您需要处理有符号的数字,则可能需要对字符串进行符号扩展,然后将其转换为Int

代码语言:javascript
复制
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 

我希望这对你有帮助!

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10178980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档