c# Есть ли более простое решение для hex2ip - PullRequest
0 голосов
/ 17 января 2020

Я хочу преобразовать шестнадцатеричный C0A8B825 ipV4 в читаемый IP-адрес 192.168.184.37. Я ищу лучшее решение.

Мое текущее решение:

var ipAddress = GetIpAddress("C0A8B825"); //192.168.184.37

public static string GetIpAddress(string hex)
{
    var ipPart1 = int.Parse(hex.Substring(0, 2), NumberStyles.HexNumber);
    var ipPart2 = int.Parse(hex.Substring(2, 2), NumberStyles.HexNumber);
    var ipPart3 = int.Parse(hex.Substring(4, 2), NumberStyles.HexNumber);
    var ipPart4 = int.Parse(hex.Substring(6, 2), NumberStyles.HexNumber);
    return $"{ipPart1}.{ipPart2}.{ipPart3}.{ipPart4}";
}

1 Ответ

0 голосов
/ 17 января 2020

Если вы когда-либо имели дело только с IPv4, вы можете использовать:

// This will convert to a 32 bit integer representation of the ip
int ip = Convert.ToInt32("C0A8B825", 16);
// IPAddress CTOR needs BigEndian / "Network Byte Order"
if( BitConverter.IsLittleEndian) ip = IPAddress.HostToNetworkOrder(ip); 
var result = new IPAddress(ip).ToString(); // Will autoformat into the desired string.

содержимое результата:

192.168.184.37

I посмотрим, смогу ли я добавить решение для IPv4 и IPv6 позже.

...