简体   繁体   中英

Convert binary string to char

I have converted some characters to binary. Now I want to convert them back to the original characters. Can anybody please tell me how to do so?

Here's my code to convert to chars to binary.

string = Integer.toBinaryString(c);

where c is a char type. So when I convert a char 'a' to binary I get something like this - 1101101

Use Integer.parseInt(String s, int radix) with a radix = 2 ( for binary ) to convert String into int and then cast the int to char , like this:

int parseInt = Integer.parseInt(your_binary_string, 2);
char c = (char)parseInt;

Fortunately, the Java APIs provide a fairly simple way of translating your binary bytes back into the original characters.

String char = (char)Integer.parseInt(string, 2)

The string is one byte(8 bits) of a the binary code. The 2 represents that we are currently in base 2. For this to work, you need to feed the above code chunks of your binary in 8 bit portions.

However, the function Integer.toBinaryString(c) doesn't always return in chunks of 8. That means you need to make sure your original output is all multiples of 8.

It'll end up looking something like this:

public String encrypt(String message) {
    //Creates array of all the characters in the message we want to convert to binary
    char[] characters = message.toCharArray();
    String returnString = "";
    String preProcessed = "";

    for(int i = 0; i < characters.length; i++) {
        //Converts the character to a binary string
        preProcessed = Integer.toBinaryString((int)characters[i]);
        //Adds enough zeros to the front of the string to make it a byte(length 8 bits)
        String zerosToAdd = "";
        if(preProcessed.length() < 8) {
            for(int j = 0; j < (8 - preProcessed.length()); j++) {
                zerosToAdd += "0";
            }
        }
        returnString += zerosToAdd + preProcessed;
    }

    //Returns a string with a length that is a multiple of 8
    return returnString;
}

//Converts a string message containing only 1s and 0s into ASCII plaintext
public String decrypt(String message) {
    //Check to make sure that the message is all 1s and 0s.
    for(int i = 0; i < message.length(); i++) {
        if(message.charAt(i) != '1' && message.charAt(i) != '0') {
            return null;
        }
    }

    //If the message does not have a length that is a multiple of 8, we can't decrypt it
    if(message.length() % 8 != 0) {
        return null;
    }

    //Splits the string into 8 bit segments with spaces in between
    String returnString = "";
    String decrypt = "";
    for(int i = 0; i < message.length() - 7; i += 8) {
        decrypt += message.substring(i, i + 8) + " ";
    }

    //Creates a string array with bytes that represent each of the characters in the message
    String[] bytes = decrypt.split(" ");
    for(int i = 0; i < bytes.length; i++) {
        /Decrypts each character and adds it to the string to get the original message
        returnString += (char)Integer.parseInt(bytes[i], 2);
    }

    return returnString;
}

I'm not sure it works in android, but have you tried simple cast?

byte b = 90; //char Z
char c = (char) b;

Following source code worked for me.

StringBuilder binary;

Create a class

public String stringToBinary(String str, boolean pad) {
    byte[] bytes = str.getBytes();
    binary = new StringBuilder();
    for (byte b : bytes)
    {
        binary.append(Integer.toBinaryString((int) b));
        if(pad) { binary.append(' '); }
    }
    System.out.println("String to Binary : "+binary);
    return binary.toString();
}

Then, call the class

stringToBinary("a",true);

Output :

1000001

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM