0

我有一个时髦的问题(我希望还没有被问到和回答)。首先,我会告诉你我正在尝试做的事情的顺序以及我是如何做的,然后告诉你我在哪里遇到了问题:

  1. 将字符串转换为 ASCII 数字
  2. 将这些 ASCII 数字转换为二进制并将它们存储在字符串中
  3. 将这些二进制数转换回 ASCII 数
  4. 将 ASCII 数字转换回普通字符

以下是我迄今为止编写的方法:

public static String strToBinary(String inputString){

    int[] ASCIIHolder = new int[inputString.length()];

    //Storing ASCII representation of characters in array of ints
    for(int index = 0; index < inputString.length(); index++){
        ASCIIHolder[index] = (int)inputString.charAt(index);
    }


    StringBuffer binaryStringBuffer = new StringBuffer();

    /* Now appending values of ASCIIHolder to binaryStringBuffer using
     * Integer.toBinaryString in a for loop. Should not get an out of bounds
     * exception because more than 1 element will be added to StringBuffer
     * each iteration.
     */
    for(int index =0;index <inputString.length();index ++){

        binaryStringBuffer.append(Integer.toBinaryString
                (ASCIIHolder[index]));
    }


    String binaryToBeReturned = binaryStringBuffer.toString();

    binaryToBeReturned.replace(" ", "");

    return binaryToBeReturned;
}

public static String binaryToString(String binaryString){

    int charCode = Integer.parseInt(binaryString, 2);

    String returnString = new Character((char)charCode).toString();

    return returnString;
}

运行代码时出现 NumberFormatException ,我认为这是因为程序试图将二进制数字转换为一个完整的二进制数字而不是单独的字母。根据您在此处看到的内容,是否有更好的方法来整体执行此操作和/或如何告诉计算机在迭代二进制代码时识别 ASCII 字符?希望这很清楚,如果没有,我会检查评论。

4

2 回答 2

1

所以我使用了 OP 的代码并进行了一些修改,它对我来说非常有效。我会在这里发布给未来的人。我认为 OP 不再需要它了,因为他可能在过去 2 年里就想通了。

public class Convert
    {
    public String strToBinary(String inputString){

    int[] ASCIIHolder = new int[inputString.length()];

    //Storing ASCII representation of characters in array of ints
    for(int index = 0; index < inputString.length(); index++){
        ASCIIHolder[index] = (int)inputString.charAt(index);
    }

    StringBuffer binaryStringBuffer = new StringBuffer();

    /* Now appending values of ASCIIHolder to binaryStringBuffer using
     * Integer.toBinaryString in a for loop. Should not get an out of bounds
     * exception because more than 1 element will be added to StringBuffer
     * each iteration.
     */
    for(int index =0;index <inputString.length();index ++){

        binaryStringBuffer.append(Integer.toBinaryString
                (ASCIIHolder[index]));
    }

    String binaryToBeReturned = binaryStringBuffer.toString();

    binaryToBeReturned.replace(" ", "");

    return binaryToBeReturned;
}

public String binaryToString(String binaryString){
    String returnString = "";
    int charCode;
    for(int i = 0; i < binaryString.length(); i+=7)
    {
    charCode = Integer.parseInt(binaryString.substring(i, i+7), 2);
    String returnChar = new Character((char)charCode).toString();
    returnString += returnChar;
    }
    return returnString;
}
}

我要感谢 OP 为我写了大部分内容。修复错误比编写新代码容易得多。

于 2015-03-19T03:40:58.803 回答
0

在这里至少有两个问题:

  • 您只是连接二进制字符串,没有分隔符。所以如果你有“1100”然后是“0011”,你会得到“11000011”,这与你有“1”后跟“1000011”的结果相同。
  • 您正在调用String.replace并忽略返回结果。当您要替换空格时,这种情况并不重要,而且无论如何都不会有任何空格......但应该有!

当然,您不必使用分隔符 - 但如果您不使用,则需要确保包含每个 UTF-16 代码点的所有 16 位。(或验证您的字符串仅使用有限范围的字符并下降到适当的位数,例如 ISO-8859-1 为 8 位或 ASCII 为 7 位。)

(我想知道这一切的意义何在。作业?我看不出这在现实生活中有用。)

于 2012-08-04T21:35:23.207 回答