Delphi » FAQ

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

Gryzli

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.

FAQ

5 komentarzy

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

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

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

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:):):):)

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ł :).