字符串十六进制二进制(java)

时间:2013-09-13 10:13:33

标签: java

    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);
            }
        }

我有一个包含二进制数的字符串。我需要将它转换为十六进制而不使用任何内置函数。我试过这些代码,但它不会运行。我不知道为什么。

当我运行它时,它会被终止。这些代码有什么问题。

6 个答案:

答案 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的两个字符串,因为Stringreference类型。

答案 5 :(得分:0)

正如其他海报alredy所说,将字符串与equals()进行比较,而不是==

此外,您的代码中有复制粘贴错误,在与0000而非1011进行比较时,“B”将永远不会打印。

如果要在不同的基数之间转换数字,使用数字类的功能会更容易。

String hex = "11000010111100001001111010111000";

long num = Long.parseLong(hex, 2);
String hexaBin = Long.toString(num, 16).toUpperCase();