PDA

View Full Version : [C] Codifica RLE


The_Matrix_Coder
15-05-2008, 17:04
Ciao a tutti,

devo effettuare la codifica rle su file di testo in C.
Le specifiche del progetto su come indicare il numero di volte in cui un carattere viene ripetuto, non deve prevedere l'utilizzando di un carattere (1 char, ovvero 1 byte) per ogni cifra del numero di occorrenze del carattere da ripetere.
Ad esempio:
nel caso della stringa: aaaaaaaaaaaaa
avrò la codifica: 13a
Questa soluzione è ritenuta altamente inefficiente per lo spreco di memoria(13 è rappresentabile con un solo byte).

Avete qualche suggerimento per un approccio migliore di questo che ottimizzi il meglio possibile l'uso della memoria,tenendo conto che non ci devono essere limitazioni sul numero di occorrenze di caratteri consecutivi nel file?

DanieleC88
15-05-2008, 18:55
Puoi sfruttare il fatto che un char (meglio, leggi degli unsigned char) abbia 8 bit, così puoi avere per ogni carattere un numero tra 0 e 256. Così puoi fargli scrivere il codice ASCII 13, usando un solo byte, invece di scrivere il numero 13 usando due byte.

Se usi due caratteri invece potrai avere un valore molto più grande (tra 0 e 255*256 + 255 = 65535 come numero massimo). Con altri caratteri in più avrai valori ancora più grandi, puoi provare a riservare due dei valori tra 0 e 255 codificabili come caratteri ASCII per rappresentare l'inizio e la fine della sequenza "numerica"... almeno questo mi viene in mente così di getto.

ciao ;)

The_Matrix_Coder
15-05-2008, 19:01
grazie mille Daniele! Ciao! ;)

71104
15-05-2008, 21:36
altre due vittime della VICIUS-ite, tsk tsk :nono:

DanieleC88
16-05-2008, 00:39
Eh? Cosa? :confused:

Ah, intendi forse il "ciao ;)" finale? :D
Be' in effetti sì l'ho fregato a VICIUS, ma devo ammettere che è molto "professional", come si richiede ad un vero mod come lui. :cool:

ciao ;)


:Prrr: