Decimal to binary conversion in the C language using the ASCII table

-1

I have to do a program that reads some characters and "transforms" each character into its corresponding number in the ASCII table and then transforms that number into binary and stores it into a vector. My code so far is:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
int i;
char mensagem[200];
    printf("Digite a mensagem: ");
        setbuf(stdin, NULL); // limpando o buffer antes de digitar a msg
        fgets(mensagem, 200, stdin); // leitura OK

int tamanho = strlen(mensagem); // pega a quant de caracteres (incluindo '\n')
// vetor de inteiros p/ armazenar os valores correspondentes dos caracteres na tabela ASCII
char *num_corresp_int; 
/* aloca um vetor de inteiros p/ os num correspondentes dos caracteres*/
    num_corresp_int =  malloc((tamanho) * sizeof(char)); 

    for(i = 0; i < tamanho; i++){
        num_corresp_int[i] = mensagem[i]; // não está passando o '
for(i = 7, a = 0, j = 0; i >= 0 && j < aux; j++, i--) {
        r = num_corresp_int[a] >> i;
            if(r & 1) {
                vetor_binario[j] = 1;
            } else {
                vetor_binario[j] = 0;
            }
        if(i == 0){
            a++;
            i = 7;
        }else if(a == tamanho){
            break;
        }
}
' } char *vetor_binario; // aloca um vetor p/ armazenar os valores em binario /* char pq preciso de apenas 1 byte p/ representar os números 0 e 1*/ vetor_binario = malloc((tamanho) * sizeof(char)); int r; /* (tamanho * 8) pq alocacarei um bit em cada posicao do vetor_binario*/ int a, j, aux = tamanho * 8; for(i = 7, a = 0, j = 0; i >= 0 && j < aux; j++, i--) { r = num_corresp_int[a] >> i; if(r & 1) { vetor_binario[j] = 1; } else { vetor_binario[j] = 0; } if(i == 0){ a++; i = 7; }else if(a == tamanho){ break; } } for(i = 0; i < aux; i++){ // Testar se o armazenamento está sendo feito corretamente printf("%d", vetor_binario[i]); } printf("\n"); return 0; }

So my question is about setting the total stop condition in the loop:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
int i;
char mensagem[200];
    printf("Digite a mensagem: ");
        setbuf(stdin, NULL); // limpando o buffer antes de digitar a msg
        fgets(mensagem, 200, stdin); // leitura OK

int tamanho = strlen(mensagem); // pega a quant de caracteres (incluindo '\n')
// vetor de inteiros p/ armazenar os valores correspondentes dos caracteres na tabela ASCII
char *num_corresp_int; 
/* aloca um vetor de inteiros p/ os num correspondentes dos caracteres*/
    num_corresp_int =  malloc((tamanho) * sizeof(char)); 

    for(i = 0; i < tamanho; i++){
        num_corresp_int[i] = mensagem[i]; // não está passando o '
for(i = 7, a = 0, j = 0; i >= 0 && j < aux; j++, i--) {
        r = num_corresp_int[a] >> i;
            if(r & 1) {
                vetor_binario[j] = 1;
            } else {
                vetor_binario[j] = 0;
            }
        if(i == 0){
            a++;
            i = 7;
        }else if(a == tamanho){
            break;
        }
}
' } char *vetor_binario; // aloca um vetor p/ armazenar os valores em binario /* char pq preciso de apenas 1 byte p/ representar os números 0 e 1*/ vetor_binario = malloc((tamanho) * sizeof(char)); int r; /* (tamanho * 8) pq alocacarei um bit em cada posicao do vetor_binario*/ int a, j, aux = tamanho * 8; for(i = 7, a = 0, j = 0; i >= 0 && j < aux; j++, i--) { r = num_corresp_int[a] >> i; if(r & 1) { vetor_binario[j] = 1; } else { vetor_binario[j] = 0; } if(i == 0){ a++; i = 7; }else if(a == tamanho){ break; } } for(i = 0; i < aux; i++){ // Testar se o armazenamento está sendo feito corretamente printf("%d", vetor_binario[i]); } printf("\n"); return 0; }

Where the total loop stop ( break ) will occur when a , which is used to reach the tamanho of the message, is equal to tamanho . I think this total stop should look like what I wrote using if and else if .

Example: If you type A and B on the keyboard, the num_corresp_int[0] = 65 and num_corresp_int[1] = 66 vector. And so, vetor_binario of position [0] to [7] should store the following corresponding numbers in the ASCII table: 01000001 and, from position [8] to [15] the following numbers: 01000010 . That is, every 8 positions of vetor_binario will have sequentially the binary representation of a decimal number of the ASCII table between 0 and 255 >.

Program exit now if typed AB on the keyboard:

  

010000011000010000101000

Let's see: With the above output, in addition to others I tested, I saw that the program stores the 8 bits of the first character ( A ) correctly, but already for the second character ( B ) vetor_binario does not store the 1st bit of the characters, only the 2nd bit onwards. OBS: In this given example, the bits after the last bit of the character B are corresponding to \n , the last two bits ( 00 ) being remains that I do not know how to take.

Questions

  • How to set the total stop condition in the loop?
  • How to solve the problem, in which from the 2nd character, the 1st bit is not being stored, and the last bits are over?
asked by anonymous 28.06.2017 / 17:49

1 answer

2

The code is confusing, it does a lot of unnecessary stuff. The question is extensive, but little useful information. One of the reasons for having difficulty is that the code is too complex. Even the most experienced do not get along with complicated code. I would do so:

#include <stdio.h>
#include <string.h>

int main(){
    char mensagem[200];
    printf("Digite a mensagem: ");
    fgets(mensagem, 200, stdin);
    mensagem[strcspn(mensagem, "\n")] = 0;
    int tamanho = strlen(mensagem);
    char vetor_binario[tamanho * 8 + 1];
    vetor_binario[tamanho * 8 + 1] = '
#include <stdio.h>
#include <string.h>

int main(){
    char mensagem[200];
    printf("Digite a mensagem: ");
    fgets(mensagem, 200, stdin);
    mensagem[strcspn(mensagem, "\n")] = 0;
    int tamanho = strlen(mensagem);
    char vetor_binario[tamanho * 8 + 1];
    vetor_binario[tamanho * 8 + 1] = '%pre%';
    for (int i = 0; i < tamanho; i++) {
        for (int j = 7; j >= 0; j--) {
            vetor_binario[i * 8 + (7 - j)] = ((mensagem[i] >> j) & 1) + '0';
        }
    }
    printf("%s", vetor_binario);
}
'; for (int i = 0; i < tamanho; i++) { for (int j = 7; j >= 0; j--) { vetor_binario[i * 8 + (7 - j)] = ((mensagem[i] >> j) & 1) + '0'; } } printf("%s", vetor_binario); }

See running on ideone . And at Coding Ground . Also put it in GitHub for future reference .

    
29.06.2017 / 02:01