Program to convert given Binary to its equivalent ASCII character string
Last Updated :
08 Feb, 2024
Given a binary string str, the task is to find its equivalent ASCII (American Standard Code for Information Interchange) 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
#include <bits/stdc++.h>
using namespace std;
int binaryToDecimal(string n)
{
string num = n;
int dec_value = 0;
int base = 1;
int len = num.length();
for ( int i = len - 1; i >= 0; i--) {
if (num[i] == '1' )
dec_value += base;
base = base * 2;
}
return dec_value;
}
string setStringtoASCII(string str)
{
int N = int (str.size());
if (N % 8 != 0) {
return "Not Possible!" ;
}
string res = "" ;
for ( int i = 0; i < N; i += 8) {
int decimal_value
= binaryToDecimal((str.substr(i, 8)));
res += char (decimal_value);
}
return res;
}
int main()
{
string s = "0110000101100010" ;
cout << setStringtoASCII(s);
return 0;
}
|
Java
import java.util.*;
class GFG
{
static int binaryToDecimal(String n)
{
String num = n;
int dec_value = 0 ;
int base = 1 ;
int len = num.length();
for ( int i = len - 1 ; i >= 0 ; i--) {
if (num.charAt(i) == '1' )
dec_value += base;
base = base * 2 ;
}
return dec_value;
}
static String setStringtoASCII(String str)
{
int N = (str.length());
if (N % 8 != 0 ) {
return "Not Possible!" ;
}
String res = "" ;
for ( int i = 0 ; i < N; i += 8 ) {
int decimal_value
= binaryToDecimal((str.substring(i, 8 +i)));
res += ( char )(decimal_value);
}
return res;
}
public static void main(String[] args)
{
String s = "0110000101100010" ;
System.out.print(setStringtoASCII(s));
}
}
|
Python3
def binaryToDecimal(n):
num = n
dec_value = 0
base = 1
le = len (num)
for i in range (le - 1 , - 1 , - 1 ):
if (num[i] = = '1' ):
dec_value + = base
base = base * 2
return dec_value
def setStringtoASCII( str ):
N = int ( len ( str ))
if (N % 8 ! = 0 ):
return "Not Possible!"
res = ""
for i in range ( 0 , N, 8 ):
decimal_value = binaryToDecimal( str [i: i + 8 ])
res + = chr (decimal_value)
return res
if __name__ = = "__main__" :
s = "0110000101100010"
print (setStringtoASCII(s))
|
C#
using System;
class GFG {
static int binaryToDecimal( string n)
{
string num = n;
int dec_value = 0;
int base1 = 1;
int len = num.Length;
for ( int i = len - 1; i >= 0; i--) {
if (num[i] == '1' )
dec_value += base1;
base1 = base1 * 2;
}
return dec_value;
}
static string setStringtoASCII( string str)
{
int N = (str.Length);
if (N % 8 != 0) {
return "Not Possible!" ;
}
string res = "" ;
for ( int i = 0; i < N; i += 8) {
int decimal_value
= binaryToDecimal((str.Substring(i, 8)));
res += ( char )(decimal_value);
}
return res;
}
public static void Main( string [] args)
{
string s = "0110000101100010" ;
Console.WriteLine(setStringtoASCII(s));
}
}
|
Javascript
<script>
function binaryToDecimal(n)
{
let num = n;
let dec_value = 0;
let base = 1;
let len = n.length;
for (let i = len - 1; i >= 0; i--)
{
if (n[i] == '1' )
dec_value += base;
base = base * 2;
}
return dec_value;
}
function setStringtoASCII(str)
{
let N = str.length;
if (N % 8 != 0)
{
return "Not Possible!" ;
}
let res = "" ;
for (let i = 0; i < N; i = i + 8)
{
let decimal_value = binaryToDecimal(
(str.slice(i, i + 8)));
res = res + String.fromCharCode(decimal_value);
}
return res;
}
let s = "0110000101100010" ;
document.write(setStringtoASCII(s));
</script>
|
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 <iostream>
#include <string>
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)
{
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[i + j] - '0' );
}
asciiString += Convert.ToChar(asciiValue);
}
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)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...