문제

쓰 C#를 사용하는 코드 windows IP 다.하나의 기능을 하려고 해요 전화입니다"GetBestInterface"는'uint'의 표현 IP.내가 무엇이 필요한 분석하는 텍스트로 표현 IP 을 만들기'uint'표현입니다.

내가 찾은 몇 가지 예제를 통해 구글,아 , 지만,저는 확신이 있어야한 표준을 달성하는 방법이다.NET.만 문제는 찾을 수 없습니다 이 표준 방법입니다.Ip 주소.분석이 될 것 같다,오른쪽 방향으로만 제공하지 않습니다 어떤 방법으로 얻기의'uint'표시...

또한 방법으로 이렇게 IP 를 사용하여 도우미 사용하여, ParseNetworkString, 지만,다시 내가 오히려 사용.NET-나는 더 적은 내가에 의존 를 더 좋습니다.

그래서 누구나 알고의 표준 방식으로 이렇게 하니다.NET?

도움이 되었습니까?

해결책

MSDN 는 Ip 주소.주소성(반환하는 숫자로 표현의 IP 주소)를 사용되지 않고 사용해야 합니다 GetAddressBytes 방법입니다.

변환할 수 있습니다 IP 주소는 숫자 값을 사용하여 다음과 같은 코드:

var ipAddress = IPAddress.Parse("some.ip.address");
var ipBytes = ipAddress.GetAddressBytes();
var ip = (uint)ipBytes [3] << 24;
ip += (uint)ipBytes [2] << 16;
ip += (uint)ipBytes [1] <<8;
ip += (uint)ipBytes [0];

편집:
으로 다른 사용자를 발견 상기 코드는 IPv4 주소만 있습니다.IPv6 주소는 128 비트 길이로 불가능하도록 변환하는'uint'으로 질문의 저자가 원했다.

다른 팁

지 않아야 될:

var ipAddress = IPAddress.Parse("some.ip.address");
var ipBytes = ipAddress.GetAddressBytes();
var ip = (uint)ipBytes [0] << 24;
ip += (uint)ipBytes [1] << 16;
ip += (uint)ipBytes [2] <<8;
ip += (uint)ipBytes [3];

?

var ipuint32 = BitConverter.ToUInt32(IPAddress.Parse("some.ip.address.ipv4").GetAddressBytes(), 0);`

이 솔루션은 쉽게 읽을 수 없는 비트가 변하고 있다.

변환하는 방법에 IPv4 주소를 정수에 C#?

또한 기억해야 합니다 IPv4IPv6 다른 길이 있습니다.

바이트산은 권장하지 않으로,그것은에 의존하는 모든 Ip 되는 4-옥텟 것들입니다.

System.Net.IPAddress ipAddress = System.Net.IPAddress.Parse("192.168.1.1");

byte[] bytes = ipAddress.GetAddressBytes();
for (int i = 0; i < bytes.Length ; i++)
       Console.WriteLine(bytes[i]);

출력 될 것입니다 192 168 1 1

내가 찾은 적이 없는 깨끗한 솔루션을(즉:클래스/메소드에서.NET 프레임워크)이 문제입니다.나는 그것이 그냥 사용할 수 없을 제외한 솔루션/예제를 제공하거나 아쿠의 예입니다.:(

완벽한 솔루션:

public static uint IpStringToUint(string ipString)
{
    var ipAddress = IPAddress.Parse(ipString);
    var ipBytes = ipAddress.GetAddressBytes();
    var ip = (uint)ipBytes [0] << 24;
    ip += (uint)ipBytes [1] << 16;
    ip += (uint)ipBytes [2] <<8;
    ip += (uint)ipBytes [3];
    return ip;
}

public static string IpUintToString(uint ipUint)
{
    var ipBytes = BitConverter.GetBytes(ipUint);
    var ipBytesRevert = new byte[4];
    ipBytesRevert[0] = ipBytes[3];
    ipBytesRevert[1] = ipBytes[2];
    ipBytesRevert[2] = ipBytes[1];
    ipBytesRevert[3] = ipBytes[0];
    return new IPAddress(ipBytesRevert).ToString();
}

반대의 순서를 바이트:

public static uint IpStringToUint(string ipString)
{
    return BitConverter.ToUInt32(IPAddress.Parse(ipString).GetAddressBytes(), 0);
}

public static string IpUintToString(uint ipUint)
{
    return new IPAddress(BitConverter.GetBytes(ipUint)).ToString();
}

테스트할 수 있습니다 여기:

https://www.browserling.com/tools/dec-to-ip

http://www.smartconversion.com/unit_conversion/IP_Address_Converter.aspx

http://www.silisoftware.com/tools/ipconverter.php

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top