Zpět na seznam článků     Číst komentáře (9)     Verze pro tisk

Konverzace na binární úrovni

Autor: Edie   
25.9.2006

Tento článek se nebude týkat hackování ani témat tomu příbuzným. Bude se jednat o pouhou rozcvičku v programování a matematice. Budeme programovat převodník textu do binární úrovně.


Úvodem ...



Tento článek nejvíce ocení ti, kteří se rádi a často baví originálními příspěvky na různých chatech. Pokud se předem domluvíte s kamarádem na použití následujícího programu a každý svůj text převedete do binárního kódu a zaplavíte jím databáze chatů, může to některé další uživatelé lehce vyvést z míry.

Princip



Každý znak na klávesnici má svoji číselnou hodnotu zapsanou v ASCII tabulce:



V Delphi existují 2 funkce na převod znaků do číselné podoby a naopak. Funkce ORD() nám vrácí číselnou hodnotu pozice znaku v ASCII tabulce. Funkce CHR() nám naopak vrací znak.
Dál už je potřeba trochu matematiky pro převod decimálního čísla do binární podoby, existuje pro to mnoho způsobů, já jsem zvolil způsob který je pro naši situaci nejoptimálnější, převádím pouze jeden bajt do a ukládám do stringové proměnné. Nejprve v globálních proměnných zavedeme proměnnou value typu integer.

function IntToBin(I: integer): string;
var
k : integer;
begin
    value := 256;
    for k := 8 downto 1 do
    begin
       value := value div 2;
       if i div value <> 0 then result := result + '1' else result := result + '0';
       i := i mod value;
    end;
end;


Následující fce jde sestupně od hodnoty 128, při každém kroku se toto číslo zmenší na polovinu a porovná zdali je větsí než naše magické číslo, které jsme získali funkcí ORD('nas_znak'), pokud ano do výstupnu přidáme '1', jestli ne pak tam přidáme '0'. Do dalšího porovnávání bereme pouze zbytek po celočíselném dělení hodnotou proměnné value.
Obdobně vytvoříme převodník z binárního kódu zpět do decimální soustavy.

function BinToInt(I: string): integer;
var
k : integer;
begin
   result := 0;
   value := 256;
   for k := 1 to 8 do
   begin
     value := value div 2;
     if i[k] = '1' then result := result + value;
   end;
end;

Myslím že princip této funkce nebude nutné vysvětlovat. Teď už nám akorát zbývá dodělat grafické prostředí. Budeme potřebovat 2x Button a 4x Memo. Nejprve zapíšeme do obsluhy událostí OnClick Buttonu číslo 1, který nám bude zabezpečovat převod textu do binární podoby.

var
   I : integer;
   charakter : char;
begin
   memo2.Text := '';
   for i := 1 to length(memo1.Text) do
   begin
     charakter := memo1.text[i];
     memo2.Text := IntToBin(ord(charakter));
   end;

end;


Tento kód pracuje s objekty Memo1 a Memo2. Vybírá postupně všechny znaky z Mema1, převede je a zapíše do Mema2. Dále zapíšeme do obsluhy událostí OnClick Buttonu číslo 2, který nám bude zabezpečovat převod binárního kódu do čitelného textu.

var
   I : integer;
   charakter : string;
begin
   memo4.Text := '';
   for i := 1 to length(memo3.Text) div 8 do
   begin
     charakter := copy(memo3.text ,i*8 - 7, 8 );
     memo4.Text := memo4.Text + chr(BinToInt(charakter));
   end;
end;


Tento kód vybírá z Mema3 vždy 8(jeden bajt) znaků binární podoby, které jsou následně funkcí BinToInt převedeny do desítkové soustavy a nasledně funkci Chr převedeny na znak.

Přeji mnoho zábavy s Vašim nově vytvořeným programem. Program + zdrojový kód ke stažení zde

Líbil se Vám článek?
Budeme potěšeni, pokud vás zaujme také reklamní nabídka

Social Bookmarking

     





Hodnocení/Hlasovalo: 2.85/33

1  2  3  4  5    
(známkování jako ve škole)