Compactador Simples
Publicado por Ricardo Rodrigues Lucca 27/02/2004
[ Hits: 17.102 ]
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;
}
Retornar o montante de um capital aplicado a juros compostos
Alocando espaço para uma matriz dinamicamente
Conio.h para Linux (Nova versão)
Nenhum comentário foi encontrado.
KDE Plasma - porque pode ser a melhor opção de interface gráfica
Gentoo: detectando impressoras de rede e como fixar uma impressora por IP
Como o GNOME conseguiu o feito de ser preterido por outras interfaces gráficas
Por que sua empresa precisa de uma PKI (e como automatizar EMISSÕES de certificados via Web API)
Instalando NoMachine no Gentoo com Systemd (acesso Remoto em LAN)
Gentoo: Trocando wpa_supplicant pelo iwd no NetworkManager (Systemd)
Instalar Linux em notebook Sony Vaio VPCEG13EB (10)
Vou destruir sua infância:) (6)
Quando vocês pararam de testar distros? (24)









