public class Try{
public static void main(String args[]){
String hex="11000010111100001001111010111000";
String HexaBin="";
for (int i = 0; i < hex.length(); i+=4) {
String str = hex.substring(i, i+4);
if (str=="0000")
HexaBin+= "0";
else if (str=="0001")
HexaBin+="1";
else if(str=="0010")
HexaBin+="2";
else if(str=="0011")
HexaBin+="3";
else if(str=="0100")
HexaBin+="4";
else if(str=="0101")
HexaBin+="5";
else if(str=="0110")
HexaBin+="6";
else if(str=="0111")
HexaBin+="7";
else if(str=="1000")
HexaBin+="8";
else if(str=="1001")
HexaBin+="9";
else if(str=="1010")
HexaBin+="A";
else if(str=="0000")
HexaBin+="B";
else if(str=="1100")
HexaBin+="C";
else if(str=="1101")
HexaBin+="D";
else if(str=="1110")
HexaBin+="E";
else if(str=="1111")
HexaBin+="F";
}
System.out.println(HexaBin);
}
}
我有一个包含二进制数的字符串。我需要将它转换为十六进制而不使用任何内置函数。我试过这些代码,但它不会运行。我不知道为什么。
当我运行它时,它会被终止。这些代码有什么问题。
答案 0 :(得分:2)
使用String.equals()
代替==
if (str.equals("0000"))
HexaBin+= "0";
else if (str.equals("0001"))
HexaBin+="1";
...
另一点:它不会让你的程序失败但是串联这样的字符串是不好的做法:
HexaBin+="5";
您应该将HexaBin声明为StringBuilder并调用StringBuilder.append():
//btw, variable names should begin with a lower case character.
StringBuilder hexaBin = new StringBuilder();
...
hexaBin.append("5");
答案 1 :(得分:1)
使用==
语句中的equals
方法替换所有if
。
==
运算符检查对象的引用是否相等,而equals
方法检查实际内容。
答案 2 :(得分:1)
这是一种不同的方法,可能对你自己有用,但没有教授会相信你写的;)
String hex = "11000010111100001001111010111000";
// to long
long val = 0;
for (char ch : hex.toCharArray())
val = val * 2 + ch - '0';
String hexidecimal = "0123456789ABCDEF";
for (int i = (hex.length() - 1) / 4 * 4; i >= 0; i -= 4)
System.out.print(hexidecimal.charAt((int) ((val >>> i) & 0xF)));
System.out.println();
打印
62F09EB8
答案 3 :(得分:0)
String是java中的对象,因此请使用equals()
而不是 ==
所以改为
if (str.equals("0000")) // for all cases
答案 4 :(得分:0)
使用equals()
比较equality
的两个字符串,因为String
是reference
类型。
答案 5 :(得分:0)
正如其他海报alredy所说,将字符串与equals()
进行比较,而不是==
。
此外,您的代码中有复制粘贴错误,在与0000
而非1011
进行比较时,“B”将永远不会打印。
如果要在不同的基数之间转换数字,使用数字类的功能会更容易。
String hex = "11000010111100001001111010111000";
long num = Long.parseLong(hex, 2);
String hexaBin = Long.toString(num, 16).toUpperCase();