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?