pl: c Mathematik über Binary

Beitrag lesen

IP Adressen über die Binary zu berechnen ist eine gute Alternative zu Bitoperationen. In C geht geht das besonders einfach weil die Binary ja praktisch im Hauptspeicher liegt. Mal alles zusammen:

#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <winsock.h>

// Decimal to Host Address
uint32_t inet_a2h(uint8_t a, uint8_t b, uint8_t c, uint8_t d){
    uint8_t octs[4] = {a,b,c,d};
    return *(uint32_t*)octs;
}

// Host Address to Decimal (Octets)
void inet_h2a(uint8_t *decim, uint32_t h){
    strncpy(decim, (uint8_t*)&h, 4);
}

int main(){
    uint32_t host = inet_a2h(192,168,12,1);
    uint8_t d[4]; // Dezimal Oktetten

    printf("IPv4 numerisch: %d\n", host );
    inet_h2a(d, host);
    printf("IPv4 Oktetten: %d.%d.%d.%d\n", d[0],d[1],d[2],d[3] );

..

Zum Umrechnen der Endianess gibt es htonl() und ntohl() aus der winsock.h. Das kleine h steht für Host (little Endian, Vaxorder), das n für Network (big Endian, Networkorder)

Schönes Wochenende!

PS: Eingangs lag die Binary in einer temp. Datei, da gibt es noch keine Datentypen. Aber das Prinzip der Umrechnung ist dasselbe.