Java二进制转换器

时间:2015-11-07 23:09:20

标签: java

我正在尝试将用户输入的单词转换为二进制。程序运行正常,但在用户输入他/她的单词后出现错误:

  

线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:26       在home.main(home.java:84)

这是我的代码:

nodejs

我正在使用Eclipse Mars.1来运行该程序。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:3)

您的问题在此代码中:

for(int b = 0; b < 27; b++)
{
    if(word.charAt(a) == alphabet[b])
    {
        wordBin.addElement(Binary[b]);
    }
}

alphabet只有26个元素,这意味着您可以访问的最高索引是25。 b < 27允许它最多索引26。

要解决此问题,只需将b < 27更改为b < alphabet.length即可。这将确保它不会超过最大索引,即使您要添加/删除元素。

使用ASCII允许其他人解码您的消息

我建议使用更通用的绘图系统。您目前要映射:

a = 0001 = 1
b = 0010 = 2
...

这些不是标准。对于不确切知道哪个字母代表哪个位组的人,您的结果将无用。虽然他们可以假设,但最好使用标准。

相反,您可以使用ASCII table查看哪个字母映射到哪个号码。从那里,您可以将数字转换为二进制。这将使其他人更容易将其转换回原始形式。

String word = "hey";
StringBuilder result = new StringBuilder();
int byteLength = 8;
for(char letter : word.toCharArray()) {
    String bits = Integer.toBinaryString((int) letter);
    if(bits.length() < byteLength) {
        StringBuilder extendedBits = new StringBuilder();
        for(int i = bits.length(); i < byteLength; i++) {
            extendedBits.append("0");
        }
        result.append(extendedBits);
    }
    result.append(bits);
}

System.out.println(result);

其他人可以使用binary to text converter将其转换回字母,因为它符合标准。

这是因为(int) letter返回该字母的ASCII映射。如果我们做了

int number = (int) 'h';

它会返回97。从那里,我们通过Integer.toBinaryString(int)将该数字转换为二进制数。

由于toBinaryString给出一个修剪值(10而不是00000010),我们必须用0填充剩余的空格,直到有足够的位来表示单个字节。

答案 1 :(得分:1)

您的if语句使用==。您应该使用if(word.equals("quit"))。 Java中的==运算符测试对象是否相同,而不仅仅是等效的。

您还会看到一个异常,告诉您已超出数组的边界。