Вопрос: Когда я преобразовать IP-адрес 192.168.115.67 к ряду, это делается так:
192 * 256 + 168 * 256 +115 * 256 + 67 * 256 = 3232265027
или как это:
192 * 256 + 168 * 256 + 115 * 256 + 67 * 256 = 1131653312
Я нахожу оба варианта онлайн, и, откровенно говоря, это не имеет значения, если я делаю все внутреннее сравнение диапазона IP, используя тот же вариант конверсии. Но я хочу, чтобы вычислить IP V6 с адреса IPv4, и, кажется, оба варианта в Интернете ... в результате различных адресов IPv6, и только один может быть правильным ...
Я использую 1131653312 вариант, поскольку 1131653312 - это вариант, который я видел .NET, дающий мне, но 3232265027 - это вариант, который я использовал, когда я делал это на C++, и это также вариант, который я нахожу в Интернете для преобразования IPv4 в IPv6 и который я использовал до Я видел, что .NET использует вариант 1131653312 ...Преобразование IP-адреса в номер:
ответ
Способ приводит к 3232265027
должен быть правильным, поскольку первое число хранится в самых высоких битах совместимости части IPv6 IPv4:
0000: 0000: 0000: 0000: 0000: FFFF: АА: CCDD
где
А.А. = 192
BB = 168
CC = 0
ДД = 1
т.д.
http://wikipedia.org/wiki/IPv6
Кроме того, вы не можете иметь в качестве IP-адреса в 256
. Значения равны 0 - 255.
Номера отправляются по большому порядку по проводу, что аналогично тому, как они написаны (192 - самый старший байт). Таким образом, первое число является «правильным». Другим вариантом является то, как одни и те же байты будут интерпретироваться по малоинтенсивной архитектуре, следовательно, поведение .Net.
Сказав все это, я действительно не уверен, в чем вопрос, поэтому я могу только надеяться, что это изложение представляет собой ответ рода.
это, безусловно, первый. вы можете выполнить ping и посмотреть, как утилита ping преобразует ее в нотацию a.b.c.d. если вы собираетесь сделать это преобразование, я рекомендую выражение: (a << 24) | (b << 16) | (c << 8) | d
почему downvoting? – Andrey
Вы не можете так сказать; это зависит от конъюнктуры его платформы. Хорошо, я полагаю, вы можете, так как .NET не точно переносится на множество разных платформ. Но в принципе вы не можете этого сказать. –
@ T.E.D. как номер он будет выглядеть как 3232265027. Второй вопрос в том, как он хранится в памяти, и этот момент я вообще не упоминал. – Andrey
Разница связана с endianness. Вы храните его в целочисленном виде, но разные процессоры имеют разные порядки байтов для своих целых чисел (сначала большой или маленький). Тем не менее, это число должно выходить за линию, поэтому IP имеет конкретный порядок, в котором ему нужны переданные байты. Этот порядок отличается от биендианских и малочисленных машин.
Я не знаю много о .net перекрестке различных аппаратных средств, однако не .net подмечено к абстрактному смещению байтов для целых чисел? –
Вопрос в том, как (правильный) IP v6 ищет данный IP v4. –
Quandary, внесите поправки, чтобы понять это. –