Compactador Simples
Publicado por Ricardo Rodrigues Lucca 27/02/2004
[ Hits: 17.020 ]
Homepage: http://aventurasdeumdevop.blogspot.com.br/
Estes programa serve para compactar um arquivo usando uma tecnica arcaica chamada run-length que compacta no maximo 255 caracteres num unico byte. Claro o programa esta mais flexivel(veja a tecnica na pagina onde me basiei), pois permite compactar qualquer arquivo já que não fica dependente de um caracter dito especial. Fora isso, ele pode demorar um bocado se o arquivo for muito grande e não tem um "salva-guarda" pra impedir que o arquivo fique maior.
/*
   Escrito Por Ricardo Rodrigues Lucca
   Este programa compacta um arquivo usando a seguinte forma:
      - Conta-se os caracteres repetidos em sequencia
      - Escreve os caracteres
   Ex.: 
   Arquivo Original : 97 97 97 97 97 100 100 2 2 2
   Arquivo Comprimido: 97 97 3 100 100 0 2 2 1
   OBS: Quando o numero chega a 256 caracteres em sequencia é forçada uma escrita ja que não dá pra ter um valor maior de 255 em 1 byte.
   OBS2: O arquivo esta bem simples acredito que ninguem vai ter problemas de entendimento. Qualquer coisa email-me. 
        OBS3: Baseado no site http://www.ulbra.tche.br/~danielnm/ed/E/polE.html
      
*/
#include <stdio.h>
FILE *arq;
void testa(void)
{
   char s[255];
   printf("Digite o nome do arquivo: ");
   scanf(" %s", s);
   arq = fopen(s,"r");
   if (arq==NULL) {
      printf("Arquivo nao existe!\n");
      testa();
   }   
}
void compacta(void)
{
   int p, n, r, check=0;
   FILE *s;
   s = fopen("saida","w");
   r = 0;
   n = fgetc(arq);
   while (!feof(arq)) {
      p = n;
      n = fgetc(arq);
      if (check==1) {
         check = 0;
         continue;
      }
      
      if (p==n) {
         r++;
         if (r==256) {
            fputc(p,s);
            fputc(p,s);
            fputc(r-1,s);
            r = 0;
            check = 1;
         }
      }
      else {
         fputc(p,s);
         if (r>0) {
            fputc(p,s);
            fputc(r-1,s);
         }
         r=0;
      }
   }   
   fclose(s);
}
int main(void)
{
   testa();
   compacta();
   fclose(arq);
   return 0;
}
Programa para cálculo vetorial
Nenhum comentário foi encontrado.
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
E aí? O Warsaw já está funcionando no Debian 13? [RESOLVIDO] (13)
copiar library para diretorio /usr/share/..... su com Falha na a... (1)
Problema em SSD ao dar boot LinuxMint LMDE FAYE 64 (3)









