2013-09-28 14 views

Odpowiedz

2

32-bitowa liczba całkowita tutaj, 570534080, może być podzielona na cztery 8-bitowe liczby całkowite bez znaku, które są dokładnym adresem IP.

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;  

Proszę zanotować endian (duży endian/little endian), co powoduje, że odpowiedź @ KerrekSB jest odwrócona.

edycja:

Załóżmy, czyniąc go bardziej zrozumiałym.

Mówiąc o adresie IP i liczb całkowitych, nie są właściwie dwa rodzaje liczb całkowitych możemy zaniepokojenie:

  1. reprezentacja całkowitą adresu IP: 192.168.1.34 < ==>(((192 * 256 + 168) * 256 + 1) * 256 + 34
  2. rzeczywiste dane (możliwe, że strumień bitów) otrzymasz i zinterpretujesz w 32-bitowej liczbie całkowitej, tak jak to, co zapewnia ten OP: 570534080 <==> (0x22, 0x01, 0xa8, 0xc0)(on a little-endian machine) <==> (34.1.168.192).

PROSZĘ ZWRÓCIĆ UWAGĘ, ŻE JEST PLATFORMA SZCZEGÓLNA I NIEBEZPIECZNA! Ponieważ zależy od kolejności bajtów liczby całkowitej, która jest nazywana endianess.

PONOWNIE edycja:

Tutaj będę głosować na @ komentarzu DavidHeffernan, która jest w użyciu inet_ntoa.

+0

Zobacz komentarz pod moją odpowiedź. Twoje rozwiązanie nie jest "odwrotnością" mojego. Mój jest zawsze poprawny; twoja musi znać endianness platformy. –

+0

@KerrekSB Przykro mi, ale nie wierzę, że twoje 'Mine jest zawsze poprawne;'. Zobacz moje aktualizacje. – starrify

+0

Tak, masz rację, nie sprawdziłem rzeczywistej wartości PO. Myślałem, że to numeryczny adres IP, ale w rzeczywistości jest to dane przewodowe interpretowane jako int. –

10
#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; 
} 

Test: http://ideone.com/RCDgj4

Dla Windows użyj #include <winsock2.h>

+0

Funkcja inet_ntoa nie daje "czytelnej" liczby całkowitej. spójrz na http://stackoverflow.com/questions/30153966/why-do-inet-ntoa-and-inet-ntop-reverse-the-bytes –

+0

@ m.r226 Nie chodzi o czytelną liczbę całkowitą – kotlomoy

Powiązane problemy