所以我有这个代码用于将二进制转换为八进制。我想转换最多64位的二进制文件,但它不起作用。
我该怎么办?
String result="";
int i;
long a[]=new long[100];
String input="11111111111111111111111111111111111111111111111";
i=0;
for(i=input.length();i>0;i-=3){
a[i]=Long.parseLong(input.substring(i-3,i));
if(a[i]==0) result+="0";
else if(a[i] == 1) result += "1";
else if(a[i]==10) result+="2";
else if(a[i]==11) result+="3";
else if(a[i]==100) result+="4";
else if(a[i]==101) result+="5";
else if(a[i]==110) result+="6";
else if(a[i]==111) result+="7";
}
System.out.print(result);
答案 0 :(得分:3)
简单的方法如下:
long l = Long.parseLong(input, 2);
System.out.println(Long.toOctalString(l));
可能使用try / catch来处理parseLong
可能抛出的NumberFormatException。
如果目的是使你的代码(某种程度)有效,那么我可以看到一些错误:
因为这是HOMEWORK(我推断)......我不打算告诉你如何修复代码。以上提示足以让您自己完成。
答案 1 :(得分:0)
我还没有对此进行过测试,但它或其它关闭应该可以解决这个问题:
String result = Integer.toOctalString(Integer.parseInt(input, 2));
答案 2 :(得分:0)
作为使用内置函数的替代方法,如parseLong(你似乎已经使用了,但显然不允许)我建议将字符串填充为三位数的倍数(使用模数运算符确定适当的填充量),然后迭代每个三位数部分并进行字符串比较(类似于您现有的长比较)以确定适当的输出字符。这种解决方案效率很低,但至少可以避免使用过多的内置函数。
答案 3 :(得分:0)
Try this code.
public class Octal {
final static char[] octals = {
'0', '1', '2', '3', '4', '5', '6', '7'
};
public static String toOctalString(long l) {
long val = l;
char[] buf = new char[64];
int pos = 64;
do {
buf[--pos] = octals[(int) (val & 0x07)];
val >>>= 3;
} while (val != 0);
return new String(buf, pos, (64 - pos));
}
public static long toDecimal(String binary) {
// input validation and null checks are omitted
char buf[] = binary.toCharArray();
long l = 0;
int shift = 0;
for (int i = buf.length - 1; i >= 0; i--)
l += ((buf[i] - '0') << shift++);
return l;
}
public static void main(String[] args) {
System.out.println(toOctalString(toDecimal("1000111010111")));
}
}