당신은 어떻게 분석하는 IP 주소에 문자열을 uint 값 C#?
-
09-06-2019 - |
문제
쓰 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);`
이 솔루션은 쉽게 읽을 수 없는 비트가 변하고 있다.
바이트산은 권장하지 않으로,그것은에 의존하는 모든 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