Hexdecimalni soustava part 1

Zdroj: SOOM.cz [ISSN 1804-7270]
Autor: BabCA SjEs
Datum: 2.6.2006
Hodnocení/Hlasovalo: 0/0

Navod na jednoduchy program, ktery prevede text na posloupnost hexadecimalnich cisel a naopak

Tak jsem se nekde na foru docetl, ze pani redaktori by chteli vytvorit clanek
psany v hexadecimalni soustave. Z pocatecnich hadek se preslo na diskuzi psanou jen
hexu. Vetsina z vas si nejspis rekla: "To jsou machri, ze si to pamatuji." Ted lehce
poodhalime rousku jejich tajemstvi a zjistime jak to, ze jsou tak dobri. Doufam, ze
takto kodovany clanek brzy vyjde. Proto pisu tyto radky, aby uz nemuseli mit
strach, ze by jsme to mi neprecetli.

A tak, aby si na nas nemohli lidi vyskakovat, ze neumime psat v hexadecimalni
soustave, napiseme si vlasni prekladac.

O co se jedna?



Jedna se o dva velice jednoduche programky (ja jsem je napsal na svem PDA za
jednu hodinu zemepisu 8)), ktere zakoduji nas text do hexadecimalni soustavy
(prvni program - velice jednochy) a take dokazi hexadecimalni soustavu
rozkodovat (druhy programek - pro zacetecniky o neco slozitejsi).

Co budu potrebovat?



Jelikoz se konzervativci nechteji porad vzdat milovaneho cecka, tak jsem se
rozhodl dat mu jeste jednu sanci. A tak jsem oprasil ze "dna disku" dev-cpp a
zkompiloval jsem zdrojak z PDAcka.

Pokud tedy pracujete pod Win stahne si Dev-Cpp. Najdete ho snad na kazdym servru
s programy ( www.slunecnice.cz atd.). Jelikoz je freeware a v ceskem prostredi je
pro nas velice vyhodny.

Unixovy silenci maji urcite nejaky kompilator Cecka. Bez nej by jim nesel
nejspis ani system. Bohuzel se kazda verze Unixu lisi a tak zalezi jen a jen na
vas.

Program #1!!

/*
/* Dekoder z decimalni soustavy do hexadecimalni soustavy
/*
/* Soubor: code.c
/*
/* Verze: 1.0.0
/*
/* Autor: BABCA SJES
/*
/* License: open source
/*
/* Datum: 2.6.06
*/

#include <stdio.h>

main(){
    /* Vypise vstup od uzivatele jako hexadecimalni posloupnost znaku */
    int c;

    printf("Zadejte text zpravy: ");
    while ((c=getchar()) != '\n'){
        if (c == ' ')
            printf (" ");
        else
            printf ("%x ", c); /* Nema cenu vymejslet, kdyz uz to nekdo udelal za nas :) */
    }
    printf("\n-_-_-_-_-_-Zmacknete prosim libovolnou klavesu-_-_-_-_-_-");
    getchar();
    return(0);
}

Jak jsme si rekli, bude vypisovat nami zadany text v hexadecimalni soustave. Z
toho vypliva, ze musime na zacatek importovat soubor stdio.h (zajistuje podporu
komunikace s uzivatelem), to jest prikaz #include <stdio.h> .

Vytvorime hlavni funkci main a zacneme "skoro nekonecny" cyklus odebirajici znaky
od uzivatele. Pokud uzivatel napise za slovem mezeru, tak ta mezera tam bude
zajistena. Dale se bude jakykoliv znak tisknout jako hexadecimalni cislo
nasledovane mezerou.

Proc tomu tak je?



Jakykoliv znak ma svoji ciselnou hodnotu zadanou v ASCII tabulce (existuje jeste
unicode, to zajistuje prostor pro 65536 tisknutelnych znaku).
Tak na pr.: a = 97 ; A = 65 ; b = 98 ; B = 66 : toto plati pro ASCII.

Prikaz printf("%x ", c); znamena: Preved cislo c na hexadecimalni cislo a dej za nej
mezeru pote ho vytiskni na obrazovku. Misto toho %x by se dala napsat funkce ktera by
to prevadela manualne, ale toho si uzijem u dekoderu :).

The End


Tak toto je konec prvniho dilu. Priste si ukazeme dekodovani hexadecimalniho textu
a vysvetlime si postup. Doufam, ze tento text vam k necemu byl. Muzete si napsat
ruzna vylepseni pr.: Ulozeni zakodovaneho textu do souboru atd. atd. Je sposta veci
co se s timto kodem da delat. A jelikoz je open source tak s kodem nakladejte podle
sebe, s podminkou zachovani hlavicky.

Zname bugy:
Po spusteni a zadani textu program ceka jen na stisknuti libovolne klavesy a ukonci
se. Z toho vypliva jen jedno pouziti na jednu zpravu :).

Pismena s diakritikou jsou prezentovany z Ceckoveho ASCII, takze se nemusi shodovat
se vsemi tabulkami. O nicem dalsim nevim.

Vyhody:
Pouziti diakritiky pr.:
Zadejte text zpravy: Žluťoulinký kůň pěl ďábelské ódy
a6 6c 75 9c 6f 75 6c 69 6e 6b ec 6b 85 e5 70 d8 6c d4 a0 62 65 6c 73 6b 82 a2 64 79 (zalamuji radek, ponevac se to sem nevejde)
-_-_-_-_-_-Zmacknete prosim libovolnou klavesu-_-_-_-_-_-

ps: Nechtel jsem nikoho urazit. Jo a Sorry za pravopis - nemam rad cestinu, ne ja ji
nenavidim (hlavne pravopis).Dyakritiku se mi psat nechtelo tak si ji tam domyslete :)
novjejsi verze kodu najdete na http://www.babcca.wz.cz/code.c nebo cely soubor
i s *.exe na http://www.babcca.wz.cz/code.zip, ale nevim jestli to
uz slape. Casem to snad pujde :)
Namety a pripominky piste na maine mail 8)
Mejte se a lovu zdar

<$] Babca Sjes [$>