Programa para convertir binario dado a su string de caracteres ASCII equivalente

Dada una string binaria str , la tarea es encontrar su string de caracteres ASCII equivalente.

Ejemplos: 

Entrada:  str = “0110000101100010”
Salida:  ab
Explicación: Dividir str en un conjunto de 8 bits de la siguiente manera: 

  • 01100001 = 97, el valor ASCII de 97 es ‘a’.
  • 01100010 = 98, el valor ASCII de 98 es ‘b’.

Por lo tanto, la string de caracteres ASCII requerida es «ab».

Entrada: str = “10000101100”
Salida: No es posible
Explicación: La string binaria dada no es una string válida ya que el número de caracteres no es un múltiplo de 8.

 

Enfoque: Este problema es un problema basado en la implementación. Siga los pasos a continuación para resolver el problema dado. 

  • En primer lugar, compruebe si s es divisible por 8 o no
    • Si no es divisible por 8 , escriba «No es posible»
    • De lo contrario, vaya al siguiente paso
  • Declare una string vacía para almacenar toda la string de caracteres ASCII.
  • Recorre s en un salto de 8 caracteres y en cada paso encuentra el valor equivalente decimal del conjunto actual de 8 bits.
  • Convierta el valor decimal a su carácter ASCII equivalente y agréguelo a la string res .
  • Devuelve la string res .

A continuación se muestra la implementación del enfoque anterior:

C++14

// C++ implementation for above approach
#include <bits/stdc++.h>
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

<script>
 
// JavaScript implementation for above approach
 
// Function to convert binary to decimal
function binaryToDecimal(n)
{
    let num = n;
 
    // Stores the decimal value
    let dec_value = 0;
 
    // Initializing base value to 1
    let base = 1;
 
    let len = n.length;
    for(let i = len - 1; i >= 0; i--)
    {
         
        // If the current bit is 1
        if (n[i] == '1')
            dec_value += base;
             
        base = base * 2;
    }
 
    // Return answer
    return dec_value;
}
 
// Function to convert binary to ASCII
function setStringtoASCII(str)
{
     
    // To store size of s
    let N = str.length;
 
    // If given string is not a
    // valid string
    if (N % 8 != 0)
    {
        return "Not Possible!";
    }
 
    // To store final answer
    let res = "";
 
    // Loop to iterate through string
    for(let i = 0; i < N; i = i + 8)
    {
        let decimal_value = binaryToDecimal(
            (str.slice(i, i + 8)));
 
        // Apprend the ASCII character
        // equivalent to current value
        res = res + String.fromCharCode(decimal_value);
    }
 
    // Return Answer
    return res;
}
 
// Driver Code
let s = "0110000101100010";
document.write(setStringtoASCII(s));
 
// This code is contributed by Potta Lokesh
 
</script>
Producción

ab

Complejidad de tiempo: O (N), ya que estamos usando un bucle para atravesar N veces, por lo que nos costará O (N) tiempo.
Espacio Auxiliar: O(N)

Publicación traducida automáticamente

Artículo escrito por bhukyavasanthkumar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *