2013-09-28 57 views

Trả lời

2

Một số nguyên 32 bit ở đây, 570534080, có thể được chia thành bốn số nguyên không dấu 8 bit, chính xác là địa chỉ 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;  

Vui lòng chú ý đến endian (endian/little endian) làm cho câu trả lời của @ KerrekSB bị đảo ngược.

EDITED:

Hãy làm cho nó rõ ràng hơn.

Khi nói về địa chỉ IP và số nguyên, có thực sự là hai loại nguyên chúng tôi lo ngại về:

  1. Các đại diện nguyên của địa chỉ IP: 192.168.1.34 < ==>(((192 * 256 + 168) * 256 + 1) * 256 + 34
  2. Các dữ liệu thực tế (bit dòng có thể) bạn nhận được và giải thích trong một số nguyên 32-bit, giống như những gì OP này cung cấp: 570534080 <==> (0x22, 0x01, 0xa8, 0xc0)(on a little-endian machine) <==> (34.1.168.192).

XIN VUI LÒNG THÔNG BÁO NÀY ĐƯỢC CHẾ BIẾN ĐẶC BIỆT VÀ NGUY HIỂM! Vì điều này dựa vào thứ tự byte của một số nguyên, được gọi là endianess.

LẠI EDITED:

Ở đây tôi muốn bỏ phiếu cho bình luận @ DavidHeffernan, mà là sử dụng inet_ntoa.

+0

Xem comment dưới câu trả lời của tôi. Giải pháp của bạn không phải là "đảo ngược" của tôi. Mỏ luôn đúng; bạn cần phải biết tính cuối cùng của nền tảng. –

+0

@KerrekSB Tôi xin lỗi nhưng tôi không tin rằng 'Mỏ của bạn luôn đúng; '. Vui lòng xem các cập nhật của tôi. – starrify

+0

Vâng, bạn nói đúng, tôi đã không kiểm tra giá trị thực tế của OP. Tôi nghĩ đó là một địa chỉ IP số, nhưng trên thực tế đó là dữ liệu dây được hiểu là 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

Đối với Windows sử dụng #include <winsock2.h>

+0

Hàm inet_ntoa không tạo ra một số nguyên "có thể đọc được". hãy xem http://stackoverflow.com/questions/30153966/why-do-inet-ntoa-and-inet-ntop-reverse-the-bytes –

+0

@ m.r226 Đây không phải là về số nguyên có thể đọc được – kotlomoy

Các vấn đề liên quan