previous next Up Title Contents Index

Esimerkki 2

Internet-verkossa tietokoneiden osoitteet, ns. IP-osoitteet, ovat 32 bittisiä kokonaislukuja.

Osoitteet esitetään "selkokielellä" yleensä neljänä 10-järjestelmän lukuna, jotka erotetaan toisistaan pisteillä.
Esimerkiksi heksajärjestelmän luku 0x0201FF05 esitetään muodossa 2.1.255.5.
Kukin neljästä tavusta esitetään tässä erikseen 10-järjestelmän lukuna, jotka erotetaan toisistaan pisteillä.

Kirjoitetaan ohjelma, joka tulostaa sille heksamuodossa syötetyn Internet-osoitteen selväkielisessä muodossa:

    #include <stdio.h>
    typedef union { 
        unsigned long long_form;
        unsigned char octet[4];
    }Ip_address_t ;
    void main (void)
    {
        Ip_address_t ip_address;
        printf ("\nAnna Internet-osoite heksalukuna: ");
        scanf ("%lx",&ip_address.long_form);
        printf ("\nIP-osoite: %d.%d.%d.%d",
            ip_address.octet[3],
            ip_address.octet[2],
            ip_address.octet[1],
            ip_address.octet[0]);
    }

Union-rakenteelle on annettu typedef-määrittelyllä nimi Ip_address_t. Siinä määritellään IP-osoitteen kaksi erilaista esitysmuotoa, joista toista käytetään ohjelman syöttövaiheessa ja toista tulostuksessa.

Osoite otetaan vastaan %lx-määreellä (long hex). Koska oktetit on määritelty etumerkittöminä kokonaislukuina (arvoalue on 0 - 255), ne voidaan tulostaa %d-määreellä.

previous next Up Title Contents Index