Preciso de ajuda para criar um checksum de codificação e decodificação para um vetor de char. O problema em si é o seguinte: O usuário digita as letras no teclado e armazenado em um vetor de char, a partir desse vetor de char é chamada uma função char *codifica(char *) e dentro dela é feito o checksum. O checksum do programa funciona assim: Tomando como exemplo que o usuário digitou 3 letras, cada letra tem 8 bits, na primeira sequencia de bytes o checksum passa um XOR nos sete primeitos bits e no oitavo ele é armazenado então o oitavo bit da sequencia original da primeira letra fica na posição nove e é a partir desse bit que foi deslocado da posição oito para nove que começa a contar uma nova sequência de bits da outra letra fazendo a segunda ter seus dois ultimos bits deslocados e na terceira ter os seus três ultimos bits deslocados. No final da função retorna o vetor codificado então ele entra em outra função char *decodifica(char *) para fazer a sua decodificação e passar o checksum para verificar possíveis erros.
Originalmente o que eu tinha feito era tratar o vetor de char como um int e transformar cada letra em binario e armazenar em um outro vetor e então a função de codificação era chamada para fazer a codificação direto pelos bits. Mas discutindo com os meus colegas de turma um deles me avisou que o professor não aceitará manipular diretamente os bits, eles tem que ficar "mascarados" e fazer todas essas operaçoes de bits nos "bastidores".
Já tenho um certo conhecimento de C e de suas funções como alocação dinâmica de memória,criação de funções, retorno de vetores em funções mas o grande problema meu é exatamente no miolo do programa. Não sei como manipular os bits dentro do char e deslocar os últimos e começar a contar a partir deles para fazer o novo ciclo do XOR sem ser pela manipulação direta dos bits por que não pode. Uso o Visual Studio 2013 e codeblocks.
Pergunta
BioByte
Boa noite a todos.
Preciso de ajuda para criar um checksum de codificação e decodificação para um vetor de char. O problema em si é o seguinte: O usuário digita as letras no teclado e armazenado em um vetor de char, a partir desse vetor de char é chamada uma função char *codifica(char *) e dentro dela é feito o checksum. O checksum do programa funciona assim: Tomando como exemplo que o usuário digitou 3 letras, cada letra tem 8 bits, na primeira sequencia de bytes o checksum passa um XOR nos sete primeitos bits e no oitavo ele é armazenado então o oitavo bit da sequencia original da primeira letra fica na posição nove e é a partir desse bit que foi deslocado da posição oito para nove que começa a contar uma nova sequência de bits da outra letra fazendo a segunda ter seus dois ultimos bits deslocados e na terceira ter os seus três ultimos bits deslocados. No final da função retorna o vetor codificado então ele entra em outra função char *decodifica(char *) para fazer a sua decodificação e passar o checksum para verificar possíveis erros.
Originalmente o que eu tinha feito era tratar o vetor de char como um int e transformar cada letra em binario e armazenar em um outro vetor e então a função de codificação era chamada para fazer a codificação direto pelos bits. Mas discutindo com os meus colegas de turma um deles me avisou que o professor não aceitará manipular diretamente os bits, eles tem que ficar "mascarados" e fazer todas essas operaçoes de bits nos "bastidores".
Já tenho um certo conhecimento de C e de suas funções como alocação dinâmica de memória,criação de funções, retorno de vetores em funções mas o grande problema meu é exatamente no miolo do programa. Não sei como manipular os bits dentro do char e deslocar os últimos e começar a contar a partir deles para fazer o novo ciclo do XOR sem ser pela manipulação direta dos bits por que não pode. Uso o Visual Studio 2013 e codeblocks.
Agradeço a ajuda desde já.
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.