dww*_*n66 91 java string binary radix
我有一个字符串数组,表示我想要转换为相应的基数为10的二进制数字(没有前导零).考虑:
binary 1011 becomes integer 11
binary 1001 becomes integer 9
binary 11 becomes integer 3 etc.
Run Code Online (Sandbox Code Playgroud)
什么是最好的方法?我一直在探索java.lang.number.*而没有找到直接的转换方法.Integer.parseInt(b)产生一个整数EQUAL到String ...例如,1001变为1,001而不是9 ...并且似乎不包括输出基数的参数.toBinaryString转换方向是否错误.我怀疑我需要进行多步转换,但似乎无法找到正确的方法或子类组合.我也不确定领先零或缺少零的程度是一个问题.有人有什么好的指示指点我吗?
Mat*_*all 231
您需要指定基数.有一个超载Integer#parseInt()允许你.
int foo = Integer.parseInt("1001", 2);
Run Code Online (Sandbox Code Playgroud)
Has*_*san 16
这可能有效:
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;
}
Run Code Online (Sandbox Code Playgroud)
int foo = Integer.parseInt("1001", 2);
Run Code Online (Sandbox Code Playgroud)
如果你正在处理正数而工作正常,但如果你需要处理有符号数字,你可能需要签名扩展你的字符串然后转换为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
Run Code Online (Sandbox Code Playgroud)
我希望有所帮助!
小智 5
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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
169748 次 |
| 最近记录: |