Ciao, questa è la consegna dell'esercizio:
Creare i file ip.h e ip.c che consentano di utilizzare la seguente funzione:
extern uint32_t *leggi_indirizzi_ip(const char *filename, size_t *size);
La funzione riceve il nome di un file da aprire in modalità lettura tradotta (testo), e 
un puntatore ad un size_t. Il file contiene una sequenza di righe contenenti indirizzi IP 
in formato testo, ovvero quattro numeri interi da 0 a 255 separati da tre punti. Ad 
esempio:
127.0.0.1?
10.0.42.3?
78.15.46.23?
La funzione deve convertire il file in una sequenza allocata dinamicamente di numeri 
interi a 32 bit in big endian. Ogni numero è formato dai 4 byte corrispondenti ai valori 
degli indirizzi IP. Nel caso precedente, la funzione dovrebbe allocare 3 interi a 32 bit, 
che contengano i valori 0x7F000001, 0x0A002A03, 0x4E0F2E17. La variabile puntata da size 
deve essere impostata al numero di valori letti.
Se il file è vuoto o non esiste, se contiene numeri non compresi nell’intervallo 
rappresentabile in un byte o se contiene linee incomplete, la funzione ritorna NULL e 
imposta size a 0.
Questo è il mio file.h:
#if !defined IP_H
#define IP_H
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<stdint.h>
extern uint32_t *leggi_indirizzi_ip(const char *filename, size_t *size);
#endif
questo è il mio main.c:
#include "ip.h"
int main(){
	size_t *size;
	uint32_t ris = leggi_indirizzi_ip("leggo.txt", &size);
	return ris;
}
questo è il mio file.c:
#include "ip.h"
uint32_t *leggi_indirizzi_ip(const char *filename, size_t *size){
	FILE *f = fopen(filename, "rt");
	if (f == NULL){
		*size = 0;
		return NULL;
	}
	uint32_t n1, n2, n3, n4;
	while (1){
		if (fscanf(f, "%u.%u.%u.%u", &n1, &n2, &n3, &n4) != 4){
			break;
		}
	}
}
In questo problema faccio una semplice lettura e poi realloco tranquillamente in memoria.. però mi sono bloccato e non riesco ad andare avanti. Il mio problema sta nel fatto che non so proprio come si faccia a convertire in Big endian. Qualcuno lo sa?