Estou com um probleminha no meu código de compressão de huffman, então, se alguém puder me ajudar, fico grato. :)
No meu programa, eu substituo os 8 bits originais dos caracteres que mais aparecem em uma quantidade de bits menor, que seria o código do caractere. Na hora de salvar o arquivo comprimido, o programa ajunta vários bits, que são os caracteres codificados. Ele vai ajuntando até inteirar 8 bits, e assim eu posso usar esses bits pra salvar um caractere no arquivo comprimido.
Acontece que, nesse processo todo, acaba que esses 8 bits sejam exatamente: 00011010 , que é o caractere 26, ou o caractere '\EOF'.
Com isso, ocasionalmente, no meio do arquivo comprimido tem lá no meio dele o '\EOF', e quando o programa lê o arquivo comprimido pra fazer a descompressão, quando ele se depara com esse caractere, ele acha que o arquivo acabou! E então ele para de descomprimir.
Gostaria de saber se alguém tem alguma ideia de como eu possa resolver isso, seja forçando o comando fscanf a ler o '\EOF' e seguir com o arquivo; ou alguma forma do programa identificar que ele estaria salvando o caractere '\EOF', lá na hora de comprimir.
Eu já tentei resolver isso usando uma sequencia de bits pra ser inserida antes do 00011010, e quando essa sequencia de bits fosse lida, o programa poderia identificar que o que vem depois era o '\EOF'. Assim eu n precisaria salvar o caractere '\EOF' no arquivo comprimido, só a sequencia de bits já bastaria pro programa entender que o caractere devia estar ali. Mas isso não deu certo. :(
Obrigado pela ajuda, desde já. Qualquer coisa eu posto o código do programa que eu tenho aqui.
Question
Cecil
Olá
Estou com um probleminha no meu código de compressão de huffman, então, se alguém puder me ajudar, fico grato. :)
No meu programa, eu substituo os 8 bits originais dos caracteres que mais aparecem em uma quantidade de bits menor, que seria o código do caractere. Na hora de salvar o arquivo comprimido, o programa ajunta vários bits, que são os caracteres codificados. Ele vai ajuntando até inteirar 8 bits, e assim eu posso usar esses bits pra salvar um caractere no arquivo comprimido.
Acontece que, nesse processo todo, acaba que esses 8 bits sejam exatamente: 00011010 , que é o caractere 26, ou o caractere '\EOF'.
Com isso, ocasionalmente, no meio do arquivo comprimido tem lá no meio dele o '\EOF', e quando o programa lê o arquivo comprimido pra fazer a descompressão, quando ele se depara com esse caractere, ele acha que o arquivo acabou! E então ele para de descomprimir.
Gostaria de saber se alguém tem alguma ideia de como eu possa resolver isso, seja forçando o comando fscanf a ler o '\EOF' e seguir com o arquivo; ou alguma forma do programa identificar que ele estaria salvando o caractere '\EOF', lá na hora de comprimir.
Eu já tentei resolver isso usando uma sequencia de bits pra ser inserida antes do 00011010, e quando essa sequencia de bits fosse lida, o programa poderia identificar que o que vem depois era o '\EOF'. Assim eu n precisaria salvar o caractere '\EOF' no arquivo comprimido, só a sequencia de bits já bastaria pro programa entender que o caractere devia estar ali. Mas isso não deu certo. :(
Obrigado pela ajuda, desde já. Qualquer coisa eu posto o código do programa que eu tenho aqui.
Edited by CecilLink to comment
Share on other sites
1 answer to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.