Преобразование IP-адреса к числу:

Вопрос: То, когда я преобразовываю IP-адрес 192.168.115.67 в число, является сделанным как это:
192*2563 + 168*2562+115*2561+67*2560 = 3232265027

или как это:
192*2560 + 168*2561+115*2562+67*2563 = 1131653312

Я нахожу оба варианта онлайн, и откровенно это не имеет значения, пока я делаю все внутреннее сравнение диапазона IP с помощью того же преобразования обрабатывает вариант. Но я хочу вычислить IP V6 от адреса IPv4, и кажется, что оба варианта находятся в сети... приводящей к различным адресам IPv6, и только один может быть корректным...

Я использую 1 131 653 312 вариантов, поскольку 1131653312 вариант, я видел, что.NET дать мне, но 3232265027 является вариантом, который я использовал, когда я сделал это в C++, и это - также вариант, который я нахожу в сети для IPv4 к преобразованию IPv6, и который я использовал, прежде чем я видел, что.NET использует различные 1131653312...

6
задан Stefan Steiger 27 July 2011 в 10:53
поделиться

4 ответа

Метод, приводящий к 3232265027 , должен быть правильным, поскольку первое число хранится в старших битах части совместимости IPv4 IPv6:

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

, где

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

и т. Д.

https://wikipedia.org/wiki/IPv6

Кроме того, вы не можете иметь 256 в IP-адресе. Значения от 0 до 255 каждое.

4
ответ дан 10 December 2019 в 02:43
поделиться

Числа передаются по сети в прямом порядке с прямым порядком байтов, так же, как они записываются (192 - старший байт). Таким образом, первое число является «правильным». Другой вариант - как одни и те же байты будут интерпретироваться в архитектуре с прямым порядком байтов, отсюда и поведение .Net.

Сказав все это, я действительно не уверен, в чем вопрос, поэтому я могу только надеяться, что это изложение представляет собой своего рода ответ.

0
ответ дан 10 December 2019 в 02:43
поделиться

Это определенно первая. Вы можете выполнить ping и посмотреть, как утилита ping преобразует его в нотацию a.b.c.d. Если вы собираетесь выполнить это преобразование, я рекомендую выражение: (a << 24) | (b << 16) | (c << 8) | d

5
ответ дан 10 December 2019 в 02:43
поделиться

Разница связана с порядком байтов . Вы сохраняете его в виде целого числа, но разные процессоры имеют разный порядок байтов для своих целых чисел (сначала большой или маленький конец). Однако это число должно выходить за пределы линии, поэтому IP имеет определенный порядок, в котором ему нужны передаваемые байты. Этот порядок отличается от bigendian и littleendian машин.

0
ответ дан 10 December 2019 в 02:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: