从字符串到ASCII再到二进制,回到ASCII到Java中的字符串

时间:2012-08-04 21:24:45

标签: java binary ascii

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

  1. 将字符串转换为ASCII码
  2. 将这些ASCII数转换为二进制数并将其存储在字符串
  3. 将这些二进制数转换回ASCII码
  4. 将ASCII号码转换回普通字符
  5. 以下是我到目前为止所写的方法:

    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字符?希望这很清楚,如果不是,我会检查评论。

2 个答案:

答案 0 :(得分:0)

你在这里遇到至少两个问题:

  • 你只是连接二进制字符串,没有分隔符。因此,如果您有“1100”然后“0011”,您将获得“11000011”,这与您使用“1”后跟“1000011”的结果相同。
  • 您正在调用String.replace并忽略返回结果。这种无关紧要,因为你正在替换空格,反正也不会有空格......但是应该

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

(我不得不想知道这一切的重点是什么。作业?我看不出它在现实生活中有用。)

答案 1 :(得分:0)

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

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为我写了大部分内容。修复错误比编写新代码容易得多。