我编写了一个程序,使用以下代码将十六进制数转换为其等效的二进制形式,但我得到了错误的结果。代码如下:
public String convert(String num){
String res="";
int []hex={0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111};
int i;
char ch;
for(i=0;i<num.length();i++)
{
ch=num.charAt(i);
if(ch>='a' && ch<='f'){
res+=hex[ch-97+10]+"";
}
else if(ch>='A' && ch<='F'){
res+=hex[ch-65+10]+"";
}
else if(ch>='0' && ch<='9'){
int d=ch-48;
res+=hex[d]+"";
}
}
return res;
}
如果我将示例输入作为“12ae”,那么我将得到相应的输出“1810101110”。 只有在输入字段中有数字并且仅适用于所有字符时才会发生(出错)。但是,当我将名为 hex 的数组更改为 String 类型时,它会给出确切的答案。
是因为编译器将整数数组中的数字视为某种形式的八进制数还是因为其他原因?
最佳答案
像 0010
这样的数字被解释为八进制数。写0010
和写8
是一样的。
您可以使用 Integer.binaryString
转换为二进制字符串。
关于java - 为什么我得到错误的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10151379/