Come convertire un valore intero a 32 bit in un indirizzo IP?Converti valore intero in indirizzo IP
Sto avendo int value=570534080
e voglio convertirlo in 192.168.1.34
.
Come convertire un valore intero a 32 bit in un indirizzo IP?Converti valore intero in indirizzo IP
Sto avendo int value=570534080
e voglio convertirlo in 192.168.1.34
.
Un numero intero a 32 bit, 570534080
, può essere diviso in quattro interi senza segno a 8 bit, che sono l'indirizzo IP esatto.
int value = 570534080; // which is 0x2201a8c0 (0x22, 0x01, 0xa8, 0xc0)
unsigned char *ip = &value;
/* then */
ip[0] == 192;
ip[1] == 168;
ip[2] == 1;
ip[3] == 34;
Si prega di notare l'endian (big endian/little endian), il che rende @ risposta di KerrekSB invertito.
Modificato:
di rendere più chiaro Let.
Quando si parla di indirizzi IP e numeri interi, ci sei in realtà due tipi di interi ci interessiamo circa:
192.168.1.34
< ==>(((192 * 256 + 168) * 256 + 1) * 256 + 34
570534080 <==> (0x22, 0x01, 0xa8, 0xc0)(on a little-endian machine) <==> (34.1.168.192)
.SI PREGA DI NOTARE CHE LA PIATTAFORMA È SPECIFICA E PERICOLOSA! Poiché questo si basa sull'ordine dei byte di un numero intero, che è chiamato endianess.
ANCORA A cura:
Qui avrei votato per @ commento di DavidHeffernan, che è quello di utilizzare inet_ntoa
.
Vedere il commento sotto la mia risposta. La tua soluzione non è il "contrario" del mio. Il mio è sempre corretto; il tuo ha bisogno di conoscere l'endianità della piattaforma. –
@KerrekSB Mi dispiace ma non credo che il mio 'Il mio è sempre corretto;'. Si prega di consultare i miei aggiornamenti. – starrify
Sì, hai ragione, non ho controllato il valore effettivo dell'OP. Ho pensato che fosse un indirizzo IP numerico, ma in realtà sono i dati del filo interpretati come un int. –
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(void) {
int value=570534080;
struct in_addr addr = {value};
printf("%s", inet_ntoa(addr));
return 0;
}
prova: http://ideone.com/RCDgj4
Per Windows Utilizzare #include <winsock2.h>
La funzione inet_ntoa non produce un numero intero "leggibile". date un'occhiata a http://stackoverflow.com/questions/30153966/why-do-inet-ntoa-and-inet-ntop-reverse-the-bytes –
@ m.r226 Questo non è un numero intero leggibile – kotlomoy
È possibile chiamare 'inet_ntoa' –