2009-08-30 2 views
3

У меня есть шестнадцатеричные значения в формате 4a0e94ca и т. Д., И мне нужно преобразовать их в IP-адреса, как я могу это сделать на C#?C# преобразовать hex в ip

+1

Dup - http://stackoverflow.com/questions/1139957/c-convert-int-to-hex-and-back-again – johnc

+0

Простите снайпера, я вижу, вы здесь новичок. Пожалуйста, задавайте вопросы перед отправкой дубликата. Ссылка на ответ, который вы ищете, выше – johnc

+1

Является ли это дубликат, зависит от того, как вы определяете IP-адрес, и что такое вывод (я предполагаю, что он должен быть преобразован в строку). –

ответ

3

Ну, возьмите формат с IP в таком виде:

192.168.1.1 

Чтобы получить его в одно число, вы берете каждую часть, или это вместе, в то время как сдвиг влево, 8 бит.

long l = 192 | (168 << 8) | (1 << 16) | (1 << 24); 

Таким образом, вы можете отменить этот процесс для своего номера.

Как так:

int b1 = (int) (l & 0xff); 
int b2 = (int) ((l >> 8) & 0xff); 
int b3 = (int) ((l >> 16) & 0xff); 
int b4 = (int) ((l >> 24) & 0xff); 

- Редактирование

Другие плакаты, вероятно, есть способы «чистых» сделать это в C#, так что, вероятно, использовать это в рабочем коде, но я думаю, что так, как я «Опубликованный» - это отличный способ узнать формат IP-адресов.

+0

+1 - Я считаю, что знание побитовой математики, вероятно, является самой важной частью преобразования целых чисел в IP-адреса (и наоборот), даже если ваш язык делает это за вас. –

+0

@Matthew: Хотя я согласен, что побитовая математика полезна, большинство языков, которые являются производными от C, имеют функцию inet_ntop и inet_pton именно для этой цели. – Powerlord

+0

@R. Bemrose: Конечно, но я думаю, что хорошо знать, как работают эти функции *. Каждый по-своему, хотя некоторые люди не так взволнованы, как я о том, что происходит на нижних уровнях :) –

2

Проверить C# convert integer to hex and back again

var ip = String.Format("{0}.{1}.{2}.{3}", 
    int.Parse(hexValue.Substring(0, 2), System.Globalization.NumberStyles.HexNumber), 
    int.Parse(hexValue.Substring(2, 2), System.Globalization.NumberStyles.HexNumber), 
    int.Parse(hexValue.Substring(4, 2), System.Globalization.NumberStyles.HexNumber), 
    int.Parse(hexValue.Substring(6, 2), System.Globalization.NumberStyles.HexNumber)); 
+0

Это довольно приличный способ, но, возможно, не самый быстрый. Тем не менее, +1. –

12

Если значения представляют собой IPv4-адреса можно использовать метод long.Parse и передать результат в IPAddress constructor:

var ip = new IPAddress(long.Parse("4a0e94ca", NumberStyles.AllowHexSpecifier)); 

Если они представляют собой IPv6-адрес должна convert the hex value to a byte array, а затем используйте this IPAddress constructor overload для создания IPAddress.

+0

Также очень хорошо. +1 –

+0

Чище, чем мой метод :) –

+0

Кажется, лучший способ для меня –

Смежные вопросы