Ir ao conteúdo
  • Cadastre-se
Ruan Alves

Transformar um código C++ em C

Recommended Posts

Olá, estou com um código aqui em C++ de criptografia de dados, mas preciso que ele esteja em C mas sem mudar o conceito do mesmo.

Tenho um pouco de dificuldade se puderem me ajudar e explicar o que tenho que mudar para que o código passe a ser em C eu agradeceria muito.

Segue o código abaixo:

#include <stdio.h>#include <stdlib.h>#include <string.h>// Configuração da Chave para criptografiachar CHAVE[]="AbCd";int TAM_CHAVE=strlen(CHAVE);//----------------------------------------// Vetor de entrada do texto a ser criptografado tamanho até 128char TEXTO[128];int TAM_TEXTO=128;//----------------------------------------------int TEXTO_CRIPT[1000000];bool Criptografar(){    int CHAVE_int;    for(int i=0; i< strlen(TEXTO) ; i++){        TEXTO_CRIPT[i]=TEXTO[i];    }    for(int aux=0; aux < strlen(TEXTO) ; ){        for(int i=0;i<TAM_CHAVE; i++){            CHAVE_int = CHAVE[i];            TEXTO_CRIPT[aux] = TEXTO_CRIPT[aux] * CHAVE[i];            aux++;        }    }    return true;}bool Descriptografar(){    FILE *arquivo;    int valor;    int pos_chave;    int pos_texto;    arquivo = fopen("c:\\cript\\arquivos_recebidos\\criptografado.txt","r");    if(arquivo==NULL){        return false;    }    pos_chave=0;    pos_texto=0;    while(!feof(arquivo)){        fscanf(arquivo,"%d",&valor);        valor = valor / CHAVE[pos_chave];        TEXTO[pos_texto] = (char)valor;        pos_texto++;        if(pos_chave==TAM_CHAVE-1){            pos_chave=0;        }else{            pos_chave++;        }    }    fclose(arquivo);    return true;}// ----------------------------------------- Menusvoid Recebe_texto(char tipo[]){    char aux[TAM_TEXTO];    char pause;    bool ok;    FILE *arquivo;    char palavra[128];    if(strcmp(tipo,"msg")==0){        printf("\n\nReceber texto para criptografar");        printf("\n\nDigite o texto: ");        gets(aux);        if( strlen(aux) <= TAM_TEXTO){            strcpy(TEXTO,aux);            printf("\n\nTexto recebido com sucesso!");            printf("\n\nCriptografando texto...\n\n");            ok=true;        }else{            printf("\n\nErro!\nTamanho do texto excede o limite de caracteres\n\n");            ok=false;            system("pause");        }    if(ok){        if(Criptografar()){            printf("\n\nTexto criptografado com sucesso!");            arquivo = fopen("c:\\cript\\arquivos_gerados\\criptografado.txt","wt");            if(arquivo==NULL){                printf("\n\nErro ao criar o arquivo...\n\n");            }else{                for(int i=0; i < strlen(TEXTO); i++){                    fprintf(arquivo,"%d ",TEXTO_CRIPT[i]);                }            }            fclose(arquivo);            printf("\n\nPressione enter para abrir a pasta do arquivo gerado!\n");            scanf("%c",&pause);            setbuf(stdin,NULL);            system("explorer c:\\cript\\arquivos_gerados\\");        }else{            printf("\n\nNao foi possivel criptografar o texto!\n\n");        }    }}}void Receber_Arquivo_cript(){    char pause;    printf("\n\nInstrucoes para importar um arquivo criptografado:");    printf("\n\n 1 - Renomeie o arquivo para 'criptografado.txt'");    printf("\n\n 2 - Copie o arquivo para a pasta que sera aberta a seguir");    printf("\n\n 3 - Feche o explorador e retorne a aplicacao");    printf("\n\n\n Pressione Enter para abrir a pasta");    scanf("%c",&pause);    setbuf(stdin,NULL);    system("explorer c:\\cript\\arquivos_recebidos\\");    printf("\n\nPressione enter apos colar o arquivo na pasta...\n");    scanf("%c",&pause);    setbuf(stdin,NULL);    printf("\n\nImportando arquivo...\n\n");    if( Descriptografar() ){        printf("\n Arquivo descriptografado com sucesso!\n");        system("pause");        system("cls");        printf("\n%s\n\n",TEXTO);        system("pause");    }else{        printf("\n Nao foi possivel descriptografar o arquivo!\n\n");        system("pause");    }}void Menu_Criptografar(){    int opcao;    printf("\n\tCriptografia de dados");    printf("\n\n Criptografar texto");    printf("\n\n\n 1 - Digitar texto");    printf("\n\n 2 - Voltar ao menu principal");    printf("\n\n Informe a opcao desejada: ");    scanf("%d",&opcao);    setbuf(stdin,NULL);    switch(opcao){    case 1:        system("cls");        Recebe_texto("msg");        break;    case 2:        break;    default:        printf("Opcao invalida! Tente novamente...");    }}void Menu(){    int opcao;    while(1){        system("cls");        printf("\n\tCriptografia de dados");        printf("\n\n 1 - Criptografar texto");        printf("\n\n 2 - Receber arquivo");        printf("\n\n 3 - Sair");        printf("\n\n Informe a opcao desejada: ");        scanf("%d",&opcao);        setbuf(stdin,NULL);        switch(opcao){        case 1:            system("cls");            Menu_Criptografar();            break;        case 2:            system("cls");            Receber_Arquivo_cript();            break;        case 3:            printf("\nFinalizando...\n\n");            system("pause");            exit(0);            break;        default:            printf("Opcao invalida! Tente novamente...");        }    }}//-----------------------------------------------int main(){    Menu();    return 0;}

Desde já agradeço.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @Ruan Alves

 

Também estou aprendendo as linguagens C/C++. No seu caso, acho que a forma de alterar um código C++ para C é verificar qual seria o "método" correspondente entre as duas linguagens. O tipo de dado bool, por exemplo, não pode ser implementado em C. Podemos então criar uma função para simular o tipo de dado booleano, como pode ser visto nesse link: https://allanlima.wordpress.com/2006/11/07/simulando-o-tipo-boolean-em-c/

 

Seria importante também analisar as diferenças entre as duas linguagens, como a sintaxe, operadores, conceitos de uso e as limitações de cada uma. Veja => http://studytipsandtricks.blogspot.com.br/2012/05/15-most-important-differences-between-c.html

 

Mais um site => http://www.cprogramming.com/tutorial/c-vs-c++.html

 

Mais um exemplo de alteração: no comentário do código, o compilador apresentará erro ao tentar compilar em C. Para corrigir, deve-se utilizar o comentário com uma barra e dois asteriscos:

/** Configuração da Chave para criptografia **/

Poderia postar todo o código, mas assim eu não estaria lhe ajudando, pois a melhor forma de aprender qualquer linguagem é: praticando, praticando e praticando. :)

 

Espero ter ajudado.
 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nesse código apenas o tipo bool é do C++. O resto do código é todo C.

Então basta apenas alterar bool para int, e os returns (ou atribuições) de false para 0 e true para 1.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda está dando erro em algumas partes quando compilo o código em C, não sei o que eu faço, segue abaixo o erro:

 

Linha     Coluna     Unidade                                                                     Mensagem
7            1              C:\Users\Usuario\Downloads\APS\APS.c                   [Error] initializer element is not constant
 
                              C:\Users\Usuario\Downloads\APS\APS.c                   In function 'Criptografar':
 
19          5              C:\Users\Usuario\Downloads\APS\APS.c                   [Error] 'for' loop initial declarations are only allowed in C99 mode
 
19          5               C:\Users\Usuario\Downloads\APS\APS.c                  [Note] use option -std=c99 or -std=gnu99 to compile your code
 
23          5               C:\Users\Usuario\Downloads\APS\APS.c                  [Error] 'for' loop initial declarations are only allowed in C99 mode
 
24          9               C:\Users\Usuario\Downloads\APS\APS.c                  [Error] 'for' loop initial declarations are only allowed in C99 mode
 
                               C:\Users\Usuario\Downloads\APS\APS.c                  In function 'Recebe_texto':
 
102        17             C:\Users\Usuario\Downloads\APS\APS.c                  [Error] 'for' loop initial declarations are only allowed in C99 mode
 
28                           C:\Users\Usuario\Downloads\APS\Makefile.win         recipe for target 'APS.o' failed

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acabei não reparando os seus loops, mas o padrão C não é compatível com declaração dentro do for.

Então onde estiver, por exemplo:

for(int i = 0; i...
Declare fora,

int i;for(i = 0; i...
Outro problema é a atribuição na variável global,

Você pode alterar

int TAM_CHAVE=strlen(CHAVE);
Para

#define TAM_CHAVE strlen(CHAVE)
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×