将字符串的一部分转换为 int 以从二进制转换为浮点数的最佳方法 JAVA

Best way to convert parts of a string to int to convert from binary to float JAVA

我正在编写一个程序,其中我有 9 位“0”和“1”的字符串转换为指数(获取每个索引并从右到左执行 2 ^ n)。

示例:["1","0","1"] = 2^2 + 0^1 + 2^0

我知道这是错误的,因为我收到了错误,但我很困惑该怎么做才能有效地计算它。

expoBefore = (strNum.charAt(9)) * 1 + (strNum.charAt(8)) * 2 + (strNum.charAt(7)) * 4 + (strNum.charAt(6)) * 8 + (strNum.charAt(5)) * 16 + (strNum.charAt(4)) * 32 + (strNum.charAt(3)) *  64 + (strNum.charAt(8)) * 128;

例如,对于我正在传递的字符串之一 [11111111],我希望它添加 1 * 2^0 + 1 * 2 ^1 + 1 * 2^2.....等

澄清编辑:

将由 0 和 1 组成的字符串转换为整数的更有效方法是什么?

你需要使用循环。

迭代二进制字符串。对于每个字符,如果该位已设置(其中 x 是该位的位置),则将 2^x 添加到累加器,否则,添加0.

String binary = "11111111";
int number = 0;

for(int i = binary.length() - 1; i >= 0; i--) {
    char c = binary.charAt(i);

    number += Integer.parseInt(c + "") * Math.pow(2, binary.length() - i - 1);
}

System.out.println(number); // prints 255

How to convert binary to decimal

只需使用 for 循环并向下递增以对每个数字进行最小化

您正在尝试将一个字符的 ascii 值乘以一个整数。 您必须取这个字符的整数值,然后将它与另一个整数相乘。希望这有帮助。

String str = "111";
int x = Character.getNumericValue(str.charAt(0));
int y = Character.getNumericValue(str.charAt(1));
int z = Character.getNumericValue(str.charAt(2));

System.out.println(x + y + z);

输出: 3

在循环中使用Math.pow(2, i)效率很低。 更快地保持以前的值并每次乘以 2(代码未经测试):

int ip = 1;
int sum = 0;
for ( int i = binary.length -1; i >= 0) {
   if ( binary.charAt(i) == '1' ) {
      sum += ip;
   }
   ip *= 2;
}

如果数字变大,您可能希望使用长整数。 此外,请务必检查 binary 是否仅包含零和一。