2010-05-28 44 views
7

Câu hỏi: Khi tôi chuyển đổi địa chỉ IP 192.168.115.67 để một con số, nó được thực hiện như thế này:
192 * 256 + 168 * 256 +115 * 256 + 67 * 256 = 3232265027

hay như thế này:
192 * 256 + 168 * 256 + 115 * 256 + 67 * 256 = 1131653312

Tôi tìm thấy cả hai biến thể trực tuyến, và thẳng thắn là không quan trọng miễn là tôi làm tất cả so sánh phạm vi IP nội bộ bằng cùng một biến thể quá trình chuyển đổi. Nhưng tôi muốn tính toán IP V6 từ địa chỉ IPv4, và có vẻ như cả hai biến thể trên web ... dẫn đến địa chỉ IPv6 khác nhau và chỉ có một ...

Tôi sử dụng 1131653312 biến thể, như 1131653312 là biến thể tôi thấy .NET cho tôi, nhưng 3232265027 là biến thể tôi đã sử dụng khi tôi làm nó trong C++, và đó cũng là biến thể tôi tìm thấy trên web để chuyển đổi IPv4 sang IPv6 và tôi đã sử dụng Tôi thấy rằng .NET sử dụng biến thể 1131653312 ...Chuyển đổi một địa chỉ IP cho một số:

Trả lời

5

Phương pháp dẫn đến 3232265027 nên là đúng, như số thứ nhất được lưu trữ trong các bit cao nhất của khả năng tương thích phần IPv4 IPv6:

0000: 0000: 0000: 0000: 0000: ffff: AABB: CCDD

nơi

AA = 192
BB = 168
CC = 0
DD = 1

, vv

http://wikipedia.org/wiki/IPv6

Ngoài ra, bạn không thể có một 256 trong một địa chỉ IP. Các giá trị là 0 - 255 mỗi giá trị.

0

Số được gửi theo thứ tự lớn trên dây, giống như cách chúng được viết (192 là byte quan trọng nhất). Vì vậy, số đầu tiên là "đúng". Biến thể khác là cách các byte giống nhau sẽ được diễn giải trên một kiến ​​trúc nhỏ, do đó hành vi .Net.

Có nói tất cả điều đó, tôi thực sự không chắc chắn câu hỏi là gì, vì vậy tôi chỉ có thể hy vọng rằng triển lãm này tạo thành một câu trả lời của các loại.

+0

Câu hỏi đặt ra là, IP (v6) chính xác trông như thế nào cho IP v4 đã cho. –

+0

Quandary, sửa đổi câu trả lời của bạn để làm rõ. –

5

nó chắc chắn là thứ nhất. bạn có thể ping và xem cách tiện ích ping chuyển đổi nó thành ký hiệu a.b.c.d. nếu bạn thực hiện chuyển đổi này, tôi khuyên bạn nên thể hiện: (a << 24) | (b << 16) | (c << 8) | d

+0

lý do giảm giá? – Andrey

+0

Bạn thực sự không thể nói điều đó; nó phụ thuộc vào sự kết thúc của nền tảng của anh ta. OK, tôi cho rằng bạn có thể, như .NET không chính xác được chuyển đến nhiều nền tảng khác nhau. Nhưng về nguyên tắc, bạn không thể thực sự nói điều đó. –

+0

@ T.E.D. như một con số nó sẽ trông giống như 3232265027. Câu hỏi thứ hai là làm thế nào nó được lưu trữ trong bộ nhớ, và điểm đó tôi đã không đề cập đến ở tất cả. – Andrey

0

Sự khác biệt phải làm với endianness. Bạn đang lưu trữ nó trong một số nguyên, nhưng các bộ vi xử lý khác nhau có thứ tự byte khác nhau cho số nguyên của chúng (đầu lớn hoặc nhỏ đầu tiên). Tuy nhiên, con số đó phải đi ra ngoài đường dây, vì vậy IP có một thứ tự cụ thể mà nó cần các byte được chuyển vào. Thứ tự đó trông khác với các máy tính lớn và nhỏ.

+0

Tôi không biết nhiều về phần cứng .net khác nhau, tuy nhiên không phải là .net được sử dụng để chuyển byte trừu tượng sang số nguyên? –

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