Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中从字符串到ASCII再到二进制再到ASCII再到字符串_Java_Binary_Ascii - Fatal编程技术网

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

Java中从字符串到ASCII再到二进制再到ASCII再到字符串,java,binary,ascii,Java,Binary,Ascii,我有一个古怪的问题(我希望还没有被问到和回答)。首先,我将告诉您我尝试做什么的顺序以及我是如何做的,然后告诉您我在哪里遇到了问题: 将字符串转换为ASCII数字 将这些ASCII数字转换为二进制并存储在字符串中 将这些二进制数转换回ASCII数 将ASCII数字转换回普通字符 以下是我迄今为止编写的方法: public static String strToBinary(String inputString){ int[] ASCIIHolder = new int[inputStri

我有一个古怪的问题(我希望还没有被问到和回答)。首先,我将告诉您我尝试做什么的顺序以及我是如何做的,然后告诉您我在哪里遇到了问题:

  • 将字符串转换为ASCII数字
  • 将这些ASCII数字转换为二进制并存储在字符串中
  • 将这些二进制数转换回ASCII数
  • 将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;
    }
    
    publicstaticstringstrtobinary(stringinputstring){
    int[]ascihihold=new int[inputString.length()];
    //在整数数组中存储字符的ASCII表示
    对于(int index=0;index
    
    • 您只是连接二进制字符串,没有分隔符。因此,如果您有“1100”和“0011”,您将得到“11000011”,这与您有“1”和“1000011”的结果相同
    • 您正在调用
      String.replace
      并忽略返回结果。这种情况并不重要,因为您正在替换空格,而且无论如何都不会有空格……但应该有
    当然,您不必使用分隔符,但如果不使用分隔符,则需要确保包含每个UTF-16代码点的所有16位。(或者验证您的字符串是否仅使用有限的字符范围,并降到适当的位数,例如,ISO-8859-1为8位,ASCII为7位。)


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

    所以我使用了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;
    }
    }
    
    公共类转换
    {
    公共字符串strToBinary(字符串inputString){
    int[]ascihihold=new int[inputString.length()];
    //在整数数组中存储字符的ASCII表示
    对于(int index=0;index对于(int index=0;通过“ASCII数字”索引)您是指“UTF-16代码单元”对吗?您需要确保每个“ASCII字符”*在二进制缓冲区中,使用7位;也就是说,使用填充。然后您应该需要沿着这些边界将其拆分,并将每个段分别解码为一个字符。*您确实意识到Java
    char
    是一个UTF-16码点……7位ASCII字符编码是一个子集。请确保您完全理解您正在做的事情。我不确定您是否会这样做nest——我几个月前才开始使用Java,现在还在学习细节。所谓“ASCII数字”,我指的是从ASCIIHolder[index]=(int)inputString.charAt(index)中给出的任何值@veer,我不知道。我会把它们都读一遍,然后试着重写代码。@veer我的意思是文本为UTF-8。谢谢你的提醒,我现在要回顾我的代码,并尝试解决它。你认为有一个字符串数组(或列表或其他东西)会更好吗其中每个元素都有自己的二进制值?我正在编写一个DES加密程序,在其中转换输入字符(和密钥)将字符串转换为二进制,然后运行加密算法。@Decave:为什么要将其作为1和0的字符串?通常,当人们谈论将字符串转换为二进制进行加密时,需要调用
    string.getBytes(encoding)
    。这根本不是一回事。原始加密算法的输入应该是
    byte[]
    ,而不是
    字符串。
    。这不只是将其转换为字节吗?我需要文本的实际位。再次,如果这真的是nooby,我很抱歉,但我已经很久没有编程了——我这样做是为了更好。@Decave:但是为什么需要这些位作为文本本身?这是一个非常奇怪的要求。除非你要知道,你故意试图编写一种奇怪的加密方法,但你却忽略了它的工作原理…@Decave:我实际上并不依赖堆栈溢出。虽然有时我会快速响应,但有时我不会。但你真的不应该将二进制数据作为文本处理。你应该只使用字节数组,而不使用
    Byte.parseByte
    -只需将输入文本直接转换为字节数组。您不需要遍历“100011101”等形式的字符串。