Programowanie w języku Delphi » FAQ

Jak zakodować plik, aby kodowanie nie zajmowało dużo czasu

Należy użyć kodu Ascii znaków.

Przedstawie fragment programu kodujący literę wczytaną do zmiennej 'zn'.
W programie zadeklarowano m.in. zmienne:

zn : char - znak do zakodowania
los,calk,r : word - liczby, które zostaną zapisane do pliku zamiast
                znaku 'zn'.

//----------fragment programu - kodowanie--------------</I>
randomize;
los:=random(100)+1; //generowanie liczby losowej z zakresu (1-100)
calk:=trunc(ord(zn)/los); {obliczanie części całkowitej z dzielenia kodu znaku, przez liczbę losową (zmienna 'los')}
r:=ord(zn) mod los     {obliczanie reszty z dzielenia kodu znaku, przez zmienną 'los'}
//----------------koniec fragmentu kodu-------------------


Do pliku zapisuje się zmienne 'los', 'calk', i 'r'. przed dekodowaniem są one odczytywane do zmiennych (W TEJSAMEJ KOLEJNOŚCI CO BYŁY ZAPISYWANE!).

Teraz przedstawię fragment kodu deszyfrującego.

Zmienne:

los : word - wczytana liczba losowa
calk : word - Wczytana część całkowita z dzielenia
r : word - wczytana reszta z dzielenia
zn : char - zmienna na odkodowany znak.
 
//------------------fragment kodu-dekodowanie------------
zn:=chr(calk*los+r) {do zmiennej 'zn' jest przypisany znak o kodzie "calk*los+r" część całkowita z dzielenia pomnożona przez dzielnik i dodana reszta.}
//---------koniec fragmentu kodu------------------//


To chyba wszystko. Jeszcze tylko jedna uwaga : Wielkość pliku zakodowanego jest sześciokrotnie większa od wielkości pliku, który był kodowany. Jak macie jakieś pytania to piszcie: [email protected] w temacie napiszcie 4programmers.net-kodowanie.

5 komentarzy

szpon 2004-04-23 20:25

Fakt - algorytm prosty aż do bólu :) Ale sam pisałem nie raz (co prawda znacznie bardziej skomplikowane) algorytmy, które w wyniku potrafiły dać nawet 20x więcej danych (np. ostatni - którego używam do dzisiaj: szyfrowanie 2, 128 bitowymi kluczami, z których ten drugi liczony jest na podstawie dość losowych danych oraz przekształceń bitowych pierwszego) - dlatego zawsze dodatkowo używałem kompresji (najczęściej LZW) - wtedy plik wynikowy zazwyczaj wychodził o 10-20% mniejszy niż oryginał :).

KiteK 2003-02-19 08:24

sześciokrotnie?????????????? Mój moduł do kodowania, a dokładniej 2 współdziałające ze sobą funkcje to zwiększają tylko 1,5 raza tekst. Powymyślałem sobie pełno różnych "szyfrowaczy" ale ani razu nie miałem tekstu po zakodowaniu większego o 6 razy!!!! Przecież to jest skandal :P:P:P:P:P:P:P:P:P:P:P:P:P:P:P:):):):)

Drajwer 2003-02-17 14:36

właśnie można by jeszcze zakodować tym sposobem los zapisać do pliku znowu zakodować los itp. Niewidać sensu w takim kodowaniu!

Dryobates 2003-02-17 14:06

Nie widzę sensu w takim kodowaniu. Co to ma na celu? Zaszyfrowanie? Przecież każdy może to łatwo złamać.

Johnny_Bit 2003-02-17 12:22

Plik 6-krotnie większy? Facet, jesteś genialny... Mi udało się zrobić kodowanie co powiększało plik tylko 2-krotnie...