어때요?
class Program
{
static void Main(string[] args)
{
IPAddress a = new IPAddress(new byte[] { 192, 168, 11, 12 });
IPAddress b = new IPAddress(new byte[] { 192, 168, 12, 12 });
long diff = Difference(a, b);
}
private static Int64 ConvertToLong(IPAddress a)
{
byte[] addressBits = a.GetAddressBytes();
Int64 retval = 0;
for (int i = 0; i < addressBits.Length; i++)
{
retval = (retval << 8) + (int)addressBits[i];
}
return retval;
}
private static Int64 Difference(IPAddress a, IPAddress b)
{
return Math.Abs(ConvertToLong(a) - ConvertToLong(b)) - 1;
}
}
출처
2011-01-16 15:15:31
Amy
당신은 조금 명확히해야합니다 : 0 차 근사에, 당신은 단지 32 또는 128 비트 부호없는 정수로 주소를 변환하고 그 값을 뺄 수 있습니다. 그러나 이것은 브로드 캐스트 IP를 계산하고 서브넷을 고려하지 않기 때문에 할당 할 수있는 많은 IP가 얼마나 많은지 알려주지 않습니다. –
브로드 캐스트 주소 또는 기타 특수 주소는 중요하지 않습니다. 내 요구 사항은 두 IP 주소의 산술 차이와 같은 값 (특히 ipv6)을 보유 할 수있는 C#의 데이터 구조를 얻는 것입니다. – user412272