如何二进制字符串转换为10进制在Java中
我有一个代表二进制数(无前导零)字符串数组,我想转化为相应的基地10个号码。考虑:如何二进制字符串转换为10进制在Java中
binary 1011 becomes integer 11
binary 1001 becomes integer 9
binary 11 becomes integer 3 etc.
什么是最好的处理方式?我一直在探索java.lang.number。*而没有找到直接的转换方法。 Integer.parseInt(b)
产生一个整数等于字符串...如,1001变为1001,而不是9 ...和似乎不包括用于输出基底的参数。 toBinaryString
转换方向错误。我怀疑我需要做一个多转换,但似乎无法找到的方法或子类的正确组合。我也不确定前导零或缺少的问题的程度。任何人有任何好的方向指向我?
你需要specify the radix。还有的Integer#parseInt()
过载,它允许你。
int foo = Integer.parseInt("1001", 2);
完美。我完全错过了允许基数的parseInt文档的第二行。像梦一样工作。 – dwwilson66 2012-04-16 17:58:35
这是否也适用于前导零?只是确认,虽然我看不出为什么没有。 – Siddhartha 2017-05-25 15:22:51
这可能会实现:
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;
}
-1不必要的重新发明车轮。 – 2012-04-16 17:57:15
我想这是没有必要的。当你在两节课之间有一点点时间时会发生这种情况。 – Hassan 2012-04-16 17:58:14
这个对我有帮助,因为我必须做一个转换的学校项目,而不使用java已经有的 – bucksnort2 2013-10-16 13:46:13
public Integer binaryToInteger(String binary){
char[] numbers = binary.toCharArray();
Integer result = 0;
int count = 0;
for(int i=numbers.length-1;i>=0;i--){
if(numbers[i]=='1')result+=(int)Math.pow(2, count);
count++;
}
return result;
}
我想我更无聊!修改哈桑的答案正确运作。
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
我希望帮助
作品就好了!
static int binaryToInt (String binary){
char []cA = binary.toCharArray();
int result = 0;
for (int i = cA.length-1;i>=0;i--){
//111 , length = 3, i = 2, 2^(3-3) + 2^(3-2)
// 0 1
if(cA[i]=='1') result+=Math.pow(2, cA.length-i-1);
}
return result;
}
我爱循环!好极了!
While循环用蓄电池,左到右(l
不改变):
int n = 0,
j = -1,
l = myString.length();
while (++j < l) n = (n << 1) + (myString.charAt(j) == '0' ? 0 : 1);
return n;
从右到左用2个循环增值经销商,通过Convert boolean to int in Java(绝对可怕)的启发:
int n = 0,
j = myString.length,
i = 1;
while (j-- != 0) n -= (i = i << 1) * new Boolean(myString.charAt(j) == '0').compareTo(true);
return n >> 1;
稍微更合理的实施:
int n = 0,
j = myString.length(),
i = 1;
while (j-- != 0) n += (i = i << 1) * (myString.charAt(j) == '0' ? 0 : 1);
return n >> 1;
可读版本:P
int n = 0;
for (int j = 0; j < myString.length(); j++) {
n *= 2;
n += myString.charAt(j) == '0' ? 0 : 1;
}
return n;
Java的的Integer.parseInt(文本)的修正版与负数的工作:
public static int parseInt(String binary) {
if (binary.length() < Integer.SIZE) return Integer.parseInt(binary, 2);
int result = 0;
byte[] bytes = binary.getBytes();
for (int i = 0; i < bytes.length; i++) {
if (bytes[i] == 49) {
result = result | (1 << (bytes.length - 1 - i));
}
}
return result;
}
如果你担心性能,Integer.parseInt()
和Math.pow()
是太贵了。您可以使用位操作,以做同样的事情快两倍(根据我的经验):
final int num = 87;
String biStr = Integer.toBinaryString(num);
System.out.println(" Input Number: " + num + " toBinary "+ biStr);
int dec = binaryStringToDecimal(biStr);
System.out.println("Output Number: " + dec + " toBinary "+Integer.toBinaryString(dec));
凡
int binaryStringToDecimal(String biString){
int n = biString.length();
int decimal = 0;
for (int d = 0; d < n; d++){
// append a bit=0 (i.e. shift left)
decimal = decimal << 1;
// if biStr[d] is 1, flip last added bit=0 to 1
if (biString.charAt(d) == '1'){
decimal = decimal | 1; // e.g. dec = 110 | (00)1 = 111
}
}
return decimal;
}
输出:
Input Number: 87 toBinary 1010111
Output Number: 87 toBinary 1010111
看[整数#parseInt函数( String s,int radix)](http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Integer.html#parseInt%28java.lang.String,%20int%29) – anubhava 2012-04-16 17:49:49
[将二进制数字转换为十进制数字](http://stackoverflow.com/qu estions/2115346 /转换 - 二进制数字在十进制数字) – 2012-04-16 17:50:11