GeeksforGeeks App
Open App
Browser
Continue

# Program to convert given Binary to its equivalent ASCII character string

Given a binary string str, the task is to find its equivalent ASCII character string.

Examples:

Input: str = “0110000101100010”
Output: ab
Explanation: Dividing str into set of 8 bits as follows:

• 01100001 = 97, ASCII value of 97 is ‘a’.
• 01100010 = 98, ASCII value of 98 is ‘b’.

Therefore, the required ASCII character string is “ab”.

Input: str = “10000101100”
Output: Not Possible
Explanation: The given binary string is not a valid string as the number of characters is not a multiple of 8.

Approach: This problem is implementation-based problem. Follow the steps below to solve the given problem.

• At first, check if s is divisible by 8 or not
• If not divisible by 8 print “Not Possible”
• Otherwise, move to the next step
• Declare an empty string to store all the ASCII character string.
• Traverses in a jump of 8 characters and in each step find the decimal equivalent value of the current set of 8 bits.
• Convert the decimal value to its equivalent ASCII character and append it to the res string.
• Return the res string.

Below is the implementation of the above approach:

## C++14

 `// C++ implementation for above approach``#include ``using` `namespace` `std;` `// Function to convert binary to decimal``int` `binaryToDecimal(string n)``{``    ``string num = n;` `    ``// Stores the decimal value``    ``int` `dec_value = 0;` `    ``// Initializing base value to 1``    ``int` `base = 1;` `    ``int` `len = num.length();``    ``for` `(``int` `i = len - 1; i >= 0; i--) {` `        ``// If the current bit is 1``        ``if` `(num[i] == ``'1'``)``            ``dec_value += base;``        ``base = base * 2;``    ``}` `    ``// Return answer``    ``return` `dec_value;``}` `// Function to convert binary to ASCII``string setStringtoASCII(string str)``{``    ``// To store size of s``    ``int` `N = ``int``(str.size());` `    ``// If given string is not a``    ``// valid string``    ``if` `(N % 8 != 0) {``        ``return` `"Not Possible!"``;``    ``}` `    ``// To store final answer``    ``string res = ``""``;` `    ``// Loop to iterate through string``    ``for` `(``int` `i = 0; i < N; i += 8) {``        ``int` `decimal_value``            ``= binaryToDecimal((str.substr(i, 8)));` `        ``// Apprend the ASCII character``        ``// equivalent to current value``        ``res += ``char``(decimal_value);``    ``}` `    ``// Return Answer``    ``return` `res;``}` `// Driver Code``int` `main()``{``    ``string s = ``"0110000101100010"``;``    ``cout << setStringtoASCII(s);` `    ``return` `0;``}`

## Java

 `// Java implementation for above approach``import` `java.util.*;` `class` `GFG``{` `// Function to convert binary to decimal``static` `int` `binaryToDecimal(String n)``{``    ``String num = n;` `    ``// Stores the decimal value``    ``int` `dec_value = ``0``;` `    ``// Initializing base value to 1``    ``int` `base = ``1``;` `    ``int` `len = num.length();``    ``for` `(``int` `i = len - ``1``; i >= ``0``; i--) {` `        ``// If the current bit is 1``        ``if` `(num.charAt(i) == ``'1'``)``            ``dec_value += base;``        ``base = base * ``2``;``    ``}` `    ``// Return answer``    ``return` `dec_value;``}` `// Function to convert binary to ASCII``static` `String setStringtoASCII(String str)``{``  ` `    ``// To store size of s``    ``int` `N = (str.length());` `    ``// If given String is not a``    ``// valid String``    ``if` `(N % ``8` `!= ``0``) {``        ``return` `"Not Possible!"``;``    ``}` `    ``// To store final answer``    ``String res = ``""``;` `    ``// Loop to iterate through String``    ``for` `(``int` `i = ``0``; i < N; i += ``8``) {``        ``int` `decimal_value``            ``= binaryToDecimal((str.substring(i, ``8``+i)));` `        ``// Apprend the ASCII character``        ``// equivalent to current value``        ``res += (``char``)(decimal_value);``    ``}` `    ``// Return Answer``    ``return` `res;``}` `// Driver Code``public` `static` `void` `main(String[] args)``{``    ``String s = ``"0110000101100010"``;``    ``System.out.print(setStringtoASCII(s));` `}``}` `// This code is contributed by 29AjayKumar`

## Python3

 `# python implementation for above approach` `# Function to convert binary to decimal``def` `binaryToDecimal(n):``    ``num ``=` `n` `    ``# Stores the decimal value``    ``dec_value ``=` `0` `    ``# Initializing base value to 1``    ``base ``=` `1` `    ``le ``=` `len``(num)``    ``for` `i ``in` `range``(le ``-` `1``, ``-``1``, ``-``1``):` `        ``# If the current bit is 1``        ``if` `(num[i] ``=``=` `'1'``):``            ``dec_value ``+``=` `base``        ``base ``=` `base ``*` `2` `    ``# Return answer``    ``return` `dec_value` `# Function to convert binary to ASCII``def` `setStringtoASCII(``str``):` `    ``# To store size of s``    ``N ``=` `int``(``len``(``str``))` `    ``# If given string is not a``    ``# valid string``    ``if` `(N ``%` `8` `!``=` `0``):``        ``return` `"Not Possible!"` `        ``# To store final answer``    ``res ``=` `""` `    ``# Loop to iterate through string``    ``for` `i ``in` `range``(``0``, N, ``8``):``        ``decimal_value ``=` `binaryToDecimal(``str``[i: i ``+` `8``])` `        ``# Apprend the ASCII character``        ``# equivalent to current value``        ``res ``+``=` `chr``(decimal_value)` `        ``# Return Answer``    ``return` `res` `# Driver Code``if` `__name__ ``=``=` `"__main__"``:` `    ``s ``=` `"0110000101100010"``    ``print``(setStringtoASCII(s))` `    ``# This code is contributed by rakeshsahni`

## C#

 `// C# implementation for above approach``using` `System;` `class` `GFG {` `    ``// Function to convert binary to decimal``    ``static` `int` `binaryToDecimal(``string` `n)``    ``{``        ``string` `num = n;` `        ``// Stores the decimal value``        ``int` `dec_value = 0;` `        ``// Initializing base value to 1``        ``int` `base1 = 1;` `        ``int` `len = num.Length;``        ``for` `(``int` `i = len - 1; i >= 0; i--) {` `            ``// If the current bit is 1``            ``if` `(num[i] == ``'1'``)``                ``dec_value += base1;``            ``base1 = base1 * 2;``        ``}` `        ``// Return answer``        ``return` `dec_value;``    ``}` `    ``// Function to convert binary to ASCII``    ``static` `string` `setStringtoASCII(``string` `str)``    ``{` `        ``// To store size of s``        ``int` `N = (str.Length);` `        ``// If given String is not a``        ``// valid String``        ``if` `(N % 8 != 0) {``            ``return` `"Not Possible!"``;``        ``}` `        ``// To store final answer``        ``string` `res = ``""``;` `        ``// Loop to iterate through String``        ``for` `(``int` `i = 0; i < N; i += 8) {``            ``int` `decimal_value``                ``= binaryToDecimal((str.Substring(i, 8)));` `            ``// Apprend the ASCII character``            ``// equivalent to current value``            ``res += (``char``)(decimal_value);``        ``}` `        ``// Return Answer``        ``return` `res;``    ``}` `    ``// Driver Code``    ``public` `static` `void` `Main(``string``[] args)``    ``{``        ``string` `s = ``"0110000101100010"``;``        ``Console.WriteLine(setStringtoASCII(s));``    ``}``}` `// This code is contributed by ukasp.`

## Javascript

 ``

Output

`ab`

Time Complexity: O(N), as we are using a loop to traverse N times so it will cost us O(N) time.
Auxiliary Space: O(N)

Approach 2: bit shifting:

In this approach, we loop through the binary string in chunks of 8 characters. For each chunk, we create an integer variable asciiValue and loop through the 8 characters in the chunk. For each character, we shift asciiValue one bit to the left and add the value of the character (‘0’ or ‘1’) to the rightmost bit using the bitwise OR operator. Once we’ve processed all 8 characters in the chunk, we convert asciiValue to a character using a cast and append it to asciiString. Finally, we print asciiString to the console.

Note that we’re using static_cast<char> to convert the integer asciiValue to a character. This is safer than using a C-style cast or a regular cast because it performs compile-time checks and produces a compile error if the conversion is not allowed.

here is the code of above approach:

## C++

 `#include ``#include ` `using` `namespace` `std;` `int` `main()``{``    ``string binaryString = ``"0110000101100010"``;``    ``string asciiString = ``""``;` `    ``for` `(``size_t` `i = 0; i < binaryString.size(); i += 8) {``        ``int` `asciiValue = 0;``        ``for` `(``size_t` `j = 0; j < 8; j++) {``            ``asciiValue <<= 1;``            ``asciiValue |= (binaryString[i + j] - ``'0'``);``        ``}``        ``asciiString += ``static_cast``<``char``>(asciiValue);``    ``}` `    ``cout << asciiString << endl;` `    ``return` `0;``}`

## Java

 `import` `java.util.*;` `public` `class` `Main {``    ``public` `static` `void` `main(String[] args)``    ``{``        ``String binaryString = ``"0110000101100010"``;``        ``String asciiString = ``""``;` `        ``for` `(``int` `i = ``0``; i < binaryString.length(); i += ``8``) {``            ``int` `asciiValue = ``0``;``            ``for` `(``int` `j = ``0``; j < ``8``; j++) {``                ``asciiValue <<= ``1``;``                ``asciiValue``                    ``|= (binaryString.charAt(i + j) - ``'0'``);``            ``}``            ``asciiString += (``char``)asciiValue;``        ``}` `        ``System.out.println(asciiString);``    ``}``}`

## Python3

 `binary_string ``=` `"0110000101100010"``ascii_string ``=` `""` `for` `i ``in` `range``(``0``, ``len``(binary_string), ``8``):``    ``ascii_value ``=` `0``    ``for` `j ``in` `range``(``8``):``        ``ascii_value <<``=` `1``        ``ascii_value |``=` `int``(binary_string[i``+``j])``    ``ascii_string ``+``=` `chr``(ascii_value)` `print``(ascii_string)`

## C#

 `using` `System;` `class` `Program {``    ``static` `void` `Main(``string``[] args)``    ``{``        ``// Initialize a binary string``        ``string` `binaryString = ``"0110000101100010"``;``      ` `        ``// Initialize an empty string to store the ASCII``        ``// characters``        ``string` `asciiString = ``""``;` `        ``// Loop through the binary string in chunks of 8``        ``// bits (1 byte)``        ``for` `(``int` `i = 0; i < binaryString.Length; i += 8) {``            ``// Initialize an integer to store the ASCII``            ``// value of each byte``            ``int` `asciiValue = 0;``            ``// Loop through each bit in the byte and``            ``// calculate its ASCII value``            ``for` `(``int` `j = 0; j < 8; j++) {``                ``// Shift the bits of asciiValue to the left``                ``// by one position``                ``asciiValue <<= 1;``                ``// OR the last bit of asciiValue with the``                ``// current bit of binaryString``                ``asciiValue |= (binaryString[i + j] - ``'0'``);``            ``}``            ``// Convert the ASCII value to its corresponding``            ``// character and add it to asciiString``            ``asciiString += Convert.ToChar(asciiValue);``        ``}` `        ``// Print out the resulting ASCII string``        ``Console.WriteLine(asciiString);``    ``}``}`

## Javascript

 `const binaryString = ``"0110000101100010"``;``let asciiString = ``""``;` `for` `(let i = 0; i < binaryString.length; i += 8) {``  ``let asciiValue = 0;``  ``for` `(let j = 0; j < 8; j++) {``    ``asciiValue <<= 1;``    ``asciiValue |= parseInt(binaryString[i+j], 10);``  ``}``  ``asciiString += String.fromCharCode(asciiValue);``}` `console.log(asciiString);`

Output

`ab`

Time Complexity:  O(N), where n is the number of elements in the input array.
Auxiliary Space: O(N)

My Personal Notes arrow_drop_up