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.