viernes, 16 de enero de 2015

Como convertir un string a binario con C

Esto es especificamente con C o C++,pero especificamente con C,en este caso hacemos uso del poderoso Union y de punteros:


1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>

typedef struct _byte { /* Estructuramos 8 bits para un Byte */
    unsigned a: 1;
    unsigned b: 1;
    unsigned c: 1;
    unsigned d: 1;
    unsigned e: 1;
    unsigned f: 1;
    unsigned g: 1;
    unsigned h: 1;
} byte;

typedef union _charbits { /* Unimos un char(caracter) con un Byte */
    char ch;
    byte bits;
} charbits;

void decode(byte b)/* Esta funcion decodifica el char en 8 bits */
{
    printf("%2u%2u%2u%2u%2u%2u%2u%2u  ",b.h,b.g,b.f,b.e,b.d,b.c,b.b,b.a);
}

void readString(const char *str)/* Esta funcion simplemente lee la string como un array de punteros a char y los decodifica char a char con la funcion de arriba*/
{
    charbits word;
    while(*str) 
    {
        word.ch = *str;
        decode(word.bits);
        *str++;
    }
    printf("\n");
}

int main(int argv,char **argc) /* Iniciamos el main */
{
    if (argv > 1)
        readString(argc[1]);
    else
        printf( "Uso : %s <Palabra>",argc[0]);
    return 0;
}

Para compilar metemos el codigo en un archivo por ejemplo:

decode.c


Y compilamos:

gcc -o decode decode.c

./decode "Tiempo de Tux"

 0 1 0 1 0 1 0 0   0 1 1 0 1 0 0 1   0 1 1 0 0 1 0 1   0 1 1 0 1 1 0 1   0 1 1 1 0 0 0 0   0 1 1 0 1 1 1 1   0 0 1 0 0 0 0 0   0 1 1 0 0 1 0 0   0 1 1 0 0 1 0 1   0 0 1 0 0 0 0 0   0 1 0 1 0 1 0 0   0 1 1 1 0 1 0 1   0 1 1 1 1 0 0 0  


Eso es todo.

No hay comentarios.:

Publicar un comentario

Los comentarios serán revisados antes de ser publicados.