首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >二进制到十六进制,十六进制到二进制

二进制到十六进制,十六进制到二进制
EN

Stack Overflow用户
提问于 2014-09-05 19:27:27
回答 1查看 1.3K关注 0票数 2

我正在编写一个在十进制、二进制和十六进制之间转换的程序。程序会编译,但是当我输入二进制到十六进制时,我会得到一个异常"java.lang.StringIndexOutOfBoundsException: String超出范围: 34“。这是第一个问题。第二个问题是十六进制到二进制转换给了我一些非常长(而且不正确)的返回。我已经把两者的密码都包括进去了。向正确的方向前进是非常值得赞赏的。

二进制到十六进制:

代码语言:javascript
复制
/**
 * Method that converts a binary number to its hexadecimal equivalent.
 * @param no parameters
 * @return returns void
 */
public void binToHex()
{

    System.out.println("The binary number you enter will be converted to its hexidecimal equivalent.");

    System.out.println("Please enter a binary number: ");

    Scanner keyboard = new Scanner(System.in);

    String bin = keyboard.nextLine();

    String oldbin = bin;

    bin = bin.replace(" ", "").trim();

    StringBuffer hex = new StringBuffer("00000000000000000000000000000000");

    //String hex1 = "";

    int j = 0;

    for (int i = 0; i < bin.length(); i++)
    {

        if (bin.substring(i, i+4).equals("0000"))
        {

            hex.setCharAt(j, '0');
        }

        else if (bin.substring(i, i+4).equals("0001"))
        {

            hex.setCharAt(j, '1');
        }

        else if (bin.substring(i, i+4).equals("0010"))
        {

            hex.setCharAt(j, '2');
        }

        else if (bin.substring(i, i+4).equals("0011"))
        {

            hex.setCharAt(j, '3');
        }

        else if (bin.substring(i, i+4).equals("0100"))
        {

            hex.setCharAt(j, '4');
        }

        else if (bin.substring(i, i+4).equals("0101"))
        {

            hex.setCharAt(j, '5');
        }

        else if (bin.substring(i, i+4).equals("0110"))
        {

            hex.setCharAt(j, '6');
        }

        else if (bin.substring(i, i+4).equals("0111"))
        {

            hex.setCharAt(j, '7');
        }

        else if (bin.substring(i, i+4).equals("1000"))
        {

            hex.setCharAt(j, '8');
        }

        else if (bin.substring(i, i+4).equals("1001"))
        {

            hex.setCharAt(j, '9');
        }

        else if (bin.substring(i, i+4).equals("1010"))
        {

            hex.setCharAt(j, 'A');
        }

        else if (bin.substring(i, i+4).equals("1011"))
        {

            hex.setCharAt(j, 'B');
        }

        else if (bin.substring(i, i+4).equals("1100"))
        {

            hex.setCharAt(j, 'C');
        }

        else if (bin.substring(i, i+4).equals("1101"))
        {

            hex.setCharAt(j, 'D');
        }

        else if (bin.substring(i, i+4).equals("1110"))
        {

            hex.setCharAt(j, 'E');
        }

        else if(bin.substring(i, i+4).equals("1111"))
        {

            hex.setCharAt(j, 'F');
        }

        i = i + 4;

        j = j + 1;
    }

    System.out.println("The binary number you entered, " + oldbin + " is " + hex + " in hexadecimal.\n");

    pw.print("The binary number you entered, " + oldbin + " is " + hex + " in hexadecimal.\n");
}

}

十六进制到二进制:

代码语言:javascript
复制
/**
 * Method that converts a hexadecimal number to its binary equivalent.
 * @param no parameters
 * @return returns void
 */
public void hexToBin()
{

    System.out.println("The hexadecimal number you enter will be convered to its binary equivalent.");

    System.out.println("Please enter a hexadecimal number: ");

    Scanner keyboard = new Scanner(System.in);

    String bin = keyboard.nextLine();

    bin = bin.trim();

    String binary = "";

    for (int i = 0; i < bin.length(); i++)
    {

        if(bin.charAt(i) == '0')
        {

            binary = binary.concat("0000");
        }

        else if(bin.charAt(i) == '1')
        {

            binary = binary.concat("0001");
        }

        else if(bin.charAt(i) == '2')
        {

            binary = binary.concat("0010");
        }

        else if(bin.charAt(i) == '3')
        {

            binary = binary.concat("0011");
        }

        else if(bin.charAt(i) == '4')
        {

            binary = binary.concat("0100");
        }

        else if(bin.charAt(i) == '5')
        {

            binary = binary.concat("0101");
        }

        else if(bin.charAt(i) == '6')
        {

            binary = binary.concat("0110");
        }

        else if(bin.charAt(i) == '7')
        {

            binary = binary.concat("0111");
        }

        else if(bin.charAt(i) == '8')
        {

            binary = binary.concat("1000");
        }

        else if(bin.charAt(i) == '9')
        {

            binary = binary.concat("1001");
        }

        else if(bin.charAt(i) == 'A');
        {

            binary = binary.concat("1010");
        }

        if(bin.charAt(i) == 'B');
        {

            binary = binary.concat("1011");
        }

        if(bin.charAt(i) == 'C');
        {

            binary = binary.concat("1100");
        }

        if(bin.charAt(i) == 'D');
        {

            binary = binary.concat("1101");
        }

        if(bin.charAt(i) == 'E');
        {

            binary = binary.concat("1110");
        }

        if(bin.charAt(i) == 'F');
        {

            binary = binary.concat("1111");
        }
    }

    System.out.println("The hexadecimal you entered, " + bin + " is " + binary + " in binary.\n");

    pw.print("The hexadecimal you entered, " + bin + " is " + binary + " in binary.\n");
}

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-05 19:29:19

binToHex中:

第一个问题是,在bin.substring(i, i+4)中,i+4可能超出了界限,因为ibin.length()-1一样高。

THe第二个问题是,您不知道二进制字符串是可以除数4的。您应该将它与零放在一起。

完成左填充后,可以将循环更改为:

for (int i = 0; i < bin.length(); i+=4)

那么bin.substring(i, i+4)就永远不会超出界限。

编辑:我刚刚注意到,每次迭代结束时,我都会增加4。但是,您还在for循环中增加了1,因此在每次迭代中总共增加了5。

我还建议您使用StringBuilder而不是StringBuffer (您不需要线程安全)。并使用append方法向其添加字符。不要在第二种方法中使用String.concat。使用StringBuilder。

hexToBin中:

在某些条件下,你把else忘在ifs之前,你已经";“了。

例如:if(bin.charAt(i) == 'B');

这意味着遵循该条件的代码将始终被执行。

正确的实现应该是(尽管我仍然建议使用StringBuilder ):

代码语言:javascript
复制
    if(bin.charAt(i) == '0')
    {

        binary = binary.concat("0000");
    }

    else if(bin.charAt(i) == '1')
    {

        binary = binary.concat("0001");
    }

    else if(bin.charAt(i) == '2')
    {

        binary = binary.concat("0010");
    }

    else if(bin.charAt(i) == '3')
    {

        binary = binary.concat("0011");
    }

    else if(bin.charAt(i) == '4')
    {

        binary = binary.concat("0100");
    }

    else if(bin.charAt(i) == '5')
    {

        binary = binary.concat("0101");
    }

    else if(bin.charAt(i) == '6')
    {

        binary = binary.concat("0110");
    }

    else if(bin.charAt(i) == '7')
    {

        binary = binary.concat("0111");
    }

    else if(bin.charAt(i) == '8')
    {

        binary = binary.concat("1000");
    }

    else if(bin.charAt(i) == '9')
    {

        binary = binary.concat("1001");
    }

    else if(bin.charAt(i) == 'A')
    {

        binary = binary.concat("1010");
    }

    else if(bin.charAt(i) == 'B')
    {

        binary = binary.concat("1011");
    }

    else if(bin.charAt(i) == 'C')
    {

        binary = binary.concat("1100");
    }

    else if(bin.charAt(i) == 'D')
    {

        binary = binary.concat("1101");
    }

    else if(bin.charAt(i) == 'E')
    {

        binary = binary.concat("1110");
    }

    else if(bin.charAt(i) == 'F')
    {

        binary = binary.concat("1111");
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25692730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档