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

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

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

4

6 回答 6

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");
于 2013-09-13T10:16:03.053 回答
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
于 2013-09-13T10:28:26.460 回答
1

将 all 替换为语句==中的equals方法。if

操作员检查对象的==引用是否相等,而equals方法检查实际内容。

于 2013-09-13T10:17:18.987 回答
0

Use equals() to compare two Strings for equality as String is a reference type.

于 2013-09-13T10:18:01.490 回答
0

字符串是java中的对象,所以使用equals() 而不是 ==

所以改为

if (str.equals("0000")) // for all cases
于 2013-09-13T10:17:45.470 回答
0

正如其他海报已经说过的那样,将字符串与 进行比较equals(),而不是与==.

此外,您的代码中有一个复制粘贴错误,当您将它与0000而不是1011.

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

String hex = "11000010111100001001111010111000";

long num = Long.parseLong(hex, 2);
String hexaBin = Long.toString(num, 16).toUpperCase();
于 2013-09-13T10:39:24.830 回答