C # конвертировать гекс в IP - PullRequest
3 голосов
/ 31 августа 2009

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

Ответы [ 3 ]

14 голосов
/ 31 августа 2009

Если значения представляют адреса IPv4, вы можете использовать метод long.Parse и передать результат в конструктор IPAddress :

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

Если они представляют адреса IPv6, вам следует преобразовать шестнадцатеричное значение в байтовый массив , а затем использовать эту перегрузку конструктора IPAddress для создания IP-адреса.

3 голосов
/ 31 августа 2009

Ну, возьмите формат 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-адресов.

2 голосов
/ 31 августа 2009

Проверка C # преобразование целого числа в шестнадцатеричное и обратно

    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));
...