Ir ao conteúdo

C como fazer a conversão de binário>txt com esse código


Ir à solução Resolvido por JorgeGus,

Posts recomendados

Postado
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h> 

void lerArq(int opcao); 
void escreverBinArq(char bit7, char bit6, char bit5, char bit4, char bit3, char bit2, char bit1, char bit0); 
void limparArqSaida(); 
void decoder2(char dado, int opcao);
void informar(void); 


int main()
{
    double info;
    char resp= 'N'; 
    int opcao; 
 
    while (resp != 'S')
    {  
        
        system("cls"); 

        printf("\n\n\n\nPrograma conversor de Niveis de Linguagem.\n\n");
        printf("1 - Texto -> Binario\n");
        printf("2 - Binario -> Texto\n");
        printf("3 - Limpar o arquivo de saida\n");
        printf("4 - informações sobre o programa\n");
        printf("Opcao:");
        scanf("%d", &opcao);

        
        if ((opcao == 1)||(opcao == 2))
        {
            lerArq(opcao); 
            printf("O arquivo foi convertido com sucesso!!!");
            system("pause");
        }
        
        else if (opcao == 3)
        {
            limparArqSaida(); 
            printf("O arquivo de saida esta em branco!!!");
            system("pause");     
        }
        
        
        else if (opcao == 4)
        {
            informar();
            printf("\n");  
            system("pause");
        }

        else
        {
            printf("Opcao invalida! Favor escolher uma opcao do Menu.\n");   
            system("pause");
        }           

        printf("\n\nDeseja sair do programa?(S/N)\n");
        fflush(stdin);
        resp = toupper(getchar());
    }
    
    getchar();
    return 0; 
}


// faz a leitura do arquivo "entrada.dat"
// NÃO SE PREOCUPEM COM A PARTE DE ARQUIVOS (FILE), ESTA SÓ SERÁ VISTA EM LINGUAGEM DE PROGRAMAÇÃO, APENAS UTILIZAR A CHAMADA DA FUNÇÃO
// SALVO EM CASOS ESPECÍFICOS ONDE HAJA NECESSIDADE DE FAZER ALGUMA ADAPTAÇÃO PARA A OPÇÃO DE CONVERTER BIN->TEXTO (opcao 2)
void lerArq(int opcao)
{
    FILE *fp; //cria um ponteiro para o arquivo de dados 
    char nu;
    
    fp=fopen("entrada.ppt","rt");// abre o arquivo para leitura
    
    if (!fp)
    {
        printf("Erro!!! Arquivo não encontrado!");
    }
    
    else
    {
        while(1)
        {
            nu = fgetc(fp);//lê o conteúdo do arquivo    
            if(nu==EOF)// se o ponteiro chegou no fim do arquivo
            {
                break; // sai da estrutura
            }            
            decoder2(nu, opcao);
        }
    }
    
    fclose(fp);  // fecha o arquivo após o término do seu uso
}


// faz a escrita do arquivo "saida.dat", esta função funciona apenas para a conversão texto->bin (opcao 1), para a opção 2, deverá ser feita uma outra função
void escreverBinArq(char bit7,char bit6,char bit5,char bit4,char bit3,char bit2,char bit1,char bit0)
{
    FILE *fp; //cria um ponteiro para o arquivo de dados 

    fp=fopen("saida.ppt","at");// abre o arquivo para leitura
    
    if (fp == NULL)
    {
        printf("Erro na abertura do arquivo!");
        exit(1);
    }
    
    //escreve o conteúdo no arquivo em forma de 8 bits
    fputc(bit7,fp);
    fputc(bit6,fp);
    fputc(bit5,fp);
    fputc(bit4,fp);
    fputc(bit3,fp);
    fputc(bit2,fp);
    fputc(bit1,fp);
    fputc(bit0,fp); 
    
    fclose(fp);  // fecha o arquivo após o término do seu uso
}


// zera o arquivo de saida
void limparArqSaida()
{
    FILE *fp; //cria um ponteiro para o arquivo de dados 

    fp=fopen("saida.dat","wt");// abre o arquivo para escrita
    
    fclose(fp);
}
    

// faz as duas conversões, SE (opcao==1){texto->bin} SENAO SE(opcao == 2){bin->texto}
void decoder2(char dado, int opcao)
{
    // se a opção for 1 o número será convertido para binário
    if (opcao == 1)
    {        
        //aqui usarei condicionais para fazer a conversão de dados
        if (dado == ' ')
        {
            escreverBinArq('0','0','1','0','0','0','0','0');
        }
        
        else if (dado == '!')
        {
            escreverBinArq('0','0','1','0','0','0','0','1');
        }
        
        else if (dado == '"')
        {
            escreverBinArq('0','0','1','0','0','0','1','0');
        }
        
        else if (dado == '#')
        {
            escreverBinArq('0','0','1','0','0','0','1','1');
        }
        
        else if (dado == '$')
        {
            escreverBinArq('0','0','1','0','0','1','0','0');
        }
        
        else if (dado == '%')
        {
            escreverBinArq('0','0','1','0','0','1','0','1');
        }
        
        else if (dado == '&')
        {
            escreverBinArq('0','0','1','0','0','1','1','0');
        }
        
        else if (dado == 39)
        {
            escreverBinArq('0','0','1','0','0','1','1','1');
        }
        
        else if (dado == '(')
        {
            escreverBinArq('0','0','1','0','1','0','0','0');
        }
        
        else if (dado == ')')
        {
            escreverBinArq('0','0','1','0','1','0','0','1');
        }
        
        else if (dado == '*')
        {
            escreverBinArq('0','0','1','0','1','0','1','0');
        }
        
        else if (dado == '+')
        {
            escreverBinArq('0','0','1','0','1','0','1','1');
        }
        
        else if (dado == 44)
        {
            escreverBinArq('0','0','1','0','1','1','0','0');
        }
        
        else if (dado == '-')
        {
            escreverBinArq('0','0','1','0','1','1','0','1');
        }
        
        else if (dado == '.')
        {
            escreverBinArq('0','0','1','0','1','1','1','0');
        }
        
        else if (dado == '/')
        {
            escreverBinArq('0','0','1','0','1','1','1','1');
        }
        
        else if (dado == '0')
        {
            escreverBinArq('0','0','1','1','0','0','0','0');
        }
        
        else if (dado == '1')
        {
            escreverBinArq('0','0','1','1','0','0','0','1');
        }
        
        else if (dado == '2')
        {
            escreverBinArq('0','0','1','1','0','0','1','0');
        }
        
        else if (dado == '3')
        {
            escreverBinArq('0','0','1','1','0','0','1','1');
        }
        
        else if (dado == '4')
        {
            escreverBinArq('0','0','1','1','0','1','0','0');
        }
        
        else if (dado == '5')
        {
            escreverBinArq('0','0','1','1','0','1','0','1');
        }
        
        else if (dado == '6')
        {
            escreverBinArq('0','0','1','1','0','1','1','0');
        }
        
        else if (dado == '7')
        {
            escreverBinArq('0','0','1','1','0','1','1','1');
        }
        
        else if (dado == '8')
        {
            escreverBinArq('0','0','1','1','1','0','0','0');
        }
        
        else if (dado == '9')
        {
            escreverBinArq('0','0','1','1','1','0','0','1');
        }
        
        else if (dado == ':')
        {
            escreverBinArq('0','0','1','1','1','0','1','0');
        }
        
        else if (dado == ';')
        {
            escreverBinArq('0','0','1','1','1','0','1','1');
        }
        
        else if (dado == '<')
        {
            escreverBinArq('0','0','1','1','1','1','0','0');
        }
        
        else if (dado == '=')
        {
            escreverBinArq('0','0','1','1','1','1','0','1');
        }
        
        else if (dado == '>')
        {
            escreverBinArq('0','0','1','1','1','1','1','0');
        }
        
        else if (dado == '?')
        {
            escreverBinArq('0','0','1','1','1','1','1','1');
        }
        
        else if (dado == '@')
        {
            escreverBinArq('0','1','0','0','0','0','0','0');
        }
        else if (dado == 'A')
        {
            escreverBinArq('0','1','0','0','0','0','0','1');
        }
        
        else if (dado == 'B')
        {
            escreverBinArq('0','1','0','0','0','0','1','0');
        }
        
        else if (dado == 'C')
        {
            escreverBinArq('0','1','0','0','0','0','1','1');
        }
        
        else if (dado == 'D')
        {
            escreverBinArq('0','1','0','0','0','1','0','0');
        }
        
        else if (dado == 'E')
        {
            escreverBinArq('0','1','0','0','0','1','0','1');
        }
        
        else if (dado == 'F')
        {
            escreverBinArq('0','1','0','0','0','1','1','0');
        }
        
        else if (dado == 'G')
        {
            escreverBinArq('0','1','0','0','0','1','1','1');
        }
        
        else if (dado == 'H')
        {
            escreverBinArq('0','1','0','0','1','0','0','0');
        }
        
        else if (dado == 'I')
        {
            escreverBinArq('0','1','0','0','1','0','0','1');
        }
        
        else if (dado == 'J')
        {
            escreverBinArq('0','1','0','0','1','0','1','0');
        }
        
        else if (dado == 'K')
        {
            escreverBinArq('0','1','0','0','1','0','1','1');
        }
        
        else if (dado == 'L')
        {
            escreverBinArq('0','1','0','0','1','1','0','0');
        }
        
        else if (dado == 'M')
        {
            escreverBinArq('0','1','0','0','1','1','0','1');
        }
        
        else if (dado == 'N')
        {
            escreverBinArq('0','1','0','0','1','1','1','0');
        }
        
        else if (dado == 'O')
        {
            escreverBinArq('0','1','0','0','1','1','1','1');
        }
        
        else if (dado == 'P')
        {
            escreverBinArq('0','1','0','1','0','0','0','0');
        }
        
        else if (dado == 'Q')
        {
            escreverBinArq('0','1','0','1','0','0','0','1');
        }
        
        else if (dado == 'R')
        {
            escreverBinArq('0','1','0','1','0','0','1','0');
        }
        
        else if (dado == 'S')
        {
            escreverBinArq('0','1','0','1','0','0','1','1');
        }
        
        else if (dado == 'T')
        {
            escreverBinArq('0','1','0','1','0','1','0','0');
        }
        
        else if (dado == 'U')
        {
            escreverBinArq('0','1','0','1','0','1','0','1');
        }
        
        else if (dado == 'V')
        {
            escreverBinArq('0','1','0','1','0','1','1','0');
        }
        
        else if (dado == 'W')
        {
            escreverBinArq('0','1','0','1','0','1','1','1');
        }
        
        else if (dado == 'X')
        {
            escreverBinArq('0','1','0','1','1','0','0','0');
        }
        
        else if (dado == 'Y')
        {
            escreverBinArq('0','1','0','1','1','0','0','1');
        }
        
        else if (dado == 'Z')
        {
            escreverBinArq('0','1','0','1','1','0','1','0');
        }
        
        else if (dado == '[')
        {
            escreverBinArq('0','1','0','1','1','0','1','1');
        }
        
        else if (dado == '\\')
        {
            escreverBinArq('0','1','0','1','1','1','0','0');
        }
        
        else if (dado == ']')
        {
            escreverBinArq('0','1','0','1','1','1','0','1');
        }
        
        else if (dado == '^')
        {
            escreverBinArq('0','1','0','1','1','1','1','0');
        }
        
        else if (dado == '_')
        {
            escreverBinArq('0','1','0','1','1','1','1','1');
        }
        
        else if (dado == '`')
        {
            escreverBinArq('0','1','1','0','0','0','0','0');
        }
        
        else if (dado == 'a')
        {
            escreverBinArq('0','1','1','0','0','0','0','1');
        }
        
        else if (dado == 'b')
        {
            escreverBinArq('0','1','1','0','0','0','1','0');
        }
        
        else if (dado == 'c')
        {
            escreverBinArq('0','1','1','0','0','0','1','1');
        }
        
        else if (dado == 'd')
        {
            escreverBinArq('0','1','1','0','0','1','0','0');
        }
        
        else if (dado == 'e')
        {
            escreverBinArq('0','1','1','0','0','1','0','1');
        }
        
        else if (dado == 'f')
        {
            escreverBinArq('0','1','1','0','0','1','1','0');
        }
        
        else if (dado == 'g')
        {
            escreverBinArq('0','1','1','0','0','1','1','1');
        }
        
        else if (dado == 'h')
        {
            escreverBinArq('0','1','1','0','1','0','0','0');
        }
        
        else if (dado == 'i')
        {
            escreverBinArq('0','1','1','0','1','0','0','1');
        }
        
        else if (dado == 'j')
        {
            escreverBinArq('0','1','1','0','1','0','1','0');
        }
        
        else if (dado == 'k')
        {
            escreverBinArq('0','1','1','0','1','0','1','1');
        }
        
        else if (dado == 'l')
        {
            escreverBinArq('0','1','1','0','1','1','0','0');
        }
        
        else if (dado == 'm')
        {
            escreverBinArq('0','1','1','0','1','1','0','1');
        }
        
        else if (dado == 'n')
        {
            escreverBinArq('0','1','1','0','1','1','1','0');
        }
        
        else if (dado == 'o')
        {
            escreverBinArq('0','1','1','0','1','1','1','1');
        }
    
        else if (dado == 'p')
        {
            escreverBinArq('0','1','1','1','0','0','0','0');
        }
    
        else if (dado == 'q')
        {
            escreverBinArq('0','1','1','1','0','0','0','1');
        }
    
        else if (dado == 'r')
        {
            escreverBinArq('0','1','1','1','0','0','1','0');
        }
    
        else if (dado == 's')
        {
            escreverBinArq('0','1','1','1','0','0','1','1');
        }
    
        else if (dado == 't')
        {
            escreverBinArq('0','1','1','1','0','1','0','0');
        }
    
        else if (dado == 'u')
        {
            escreverBinArq('0','1','1','1','0','1','0','1');
        }
    
        else if (dado == 'v')
        {
            escreverBinArq('0','1','1','1','0','1','1','0');
        }
    
        else if (dado == 'w')
        {
            escreverBinArq('0','1','1','1','0','1','1','1');
        }
    
        else if (dado == 'x')
        {
            escreverBinArq('0','1','1','1','1','0','0','0');
        }
    
        else if (dado == 'y')
        {
            escreverBinArq('0','1','1','1','1','0','0','1');
        }
    
        else if (dado == 'z')
        {
            escreverBinArq('0','1','1','1','1','0','1','0');
        }
    
        else if (dado == '{')
        {
            escreverBinArq('0','1','1','1','1','0','1','1');
        }
    
        else if (dado == '|')
        {
            escreverBinArq('0','1','1','1','1','1','0','0');
        }
    
        else if (dado == '}')
        {
            escreverBinArq('0','1','1','1','1','1','0','1');
        }
    
        else if (dado == '~')
        {
            escreverBinArq('0','1','1','1','1','1','1','0');
        }
    
    }
    
    // caso contrário será convertido em texto, AQUI será a conversão de bin->texto (opcao == 2)
    
    
    else // quando a opção for igual a 2
    {
     }
    
}


// é a ajuda do programa para o usuário saber do que o mesmo trata, o que faz e como utilizar
void informar(void)
{
    printf("Programa que faz a conversao de binário para texto e de texto para binário");   
}


//--------------------------------FIM DO PROGRAMA-----------------------------//

 

  • Obrigado 1
Postado

@Breno Giacomin Barbosa     você quer converter o conteúdo de um arquivo txt ,  para binário e também um binário para txt  ,  e não entendi porque você está usando os caracteres da tabela ASCII ,  pois um binário seria pegar um inteiro e fazer divisões nele para converter para binário , e depois se você quer para esse binário para txt você pode gravar o arquivo com esses binários mesmo ,

  • Curtir 1
Postado

@devair1010 Então cara, eu to aprendendo e estou bem no básico ainda e o professor me deu parte do código pronta e falou para fazer a conversão, mas eu realmente não faço muita ideia de como fazer o binário para texto. Mesmo que ele explicou while, for, if-else e suas variações, mas não sei como eu estruturaria o for/while para ler e depois para transformar os digitos em decimal na tabela ASCII para mostrar a msg decodificada

  • Obrigado 1
  • Solução
Postado

@Breno Giacomin Barbosa Um exemplo para ajudar na conversão da string de zeros e uns para char:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int tab[] = {128, 64, 32, 16, 8, 4, 2, 1};
    char bin[] = "01000001";
    int dec = 0;
    for (int c = 0; c < 8; c++){
        if (bin[c] == '1') {
            dec = dec + tab[c];
        }
    }
    printf("%c", dec);
    return 0;
}

 

  • Obrigado 2
Postado

Não sei se entendi o que pretende fazer, então vou inverter o sentido e perguntar:

 

Você quer transformar um arquivo qualquer em outro, e "de texto para binário" seria gravar para cada byte da entrada oito bytes na saída com a representação de cada byte em binário, como

 

um arquivo que tenha um único '0' gerando um arquivo de 8 bytes contendo a representação do '0' em binário, em ASCII =  00110000 ? 

 

E vice-versa?

 

Se for só isso seu programa está muito muito complicado. Não existe esse lance de texto e binário no arquivo, apenas leia e converta, de 8 para 1 ou de 1 para 8, usando fread() e fwrite(). É muito mais simples.

 

 

  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!