2016-10-12 3 views
3

System.Net.IpAddress은 왜 다음 문자열을 유효한 IP 주소로 변환 할 수 있습니까?부분 IP 주소 문자열을 IP 주소 개체로 변환

$b = [ipaddress]"10.10.10" 
$b.IPAddressToString 
#10.10.0.10 

$c = [ipaddress]"10.10" 
$c.IPAddressToString 
#10.0.0.10 

$d = [ipaddress]"10" 
$d.IPAddressToString 
#0.0.0.10 

내가 볼 수있는 패턴은 문자열의 마지막 옥텟은 마지막 IPAddress 객체의 진수, 그리고 무엇이든 첫 번째 옥텟 문자열에있는 IPAddress에서 가장 왼쪽 옥텟으로 사용된다 있다는 것을 , 0이 있으면 중간의 지정되지 않은 옥텟을 채우는 데 사용됩니다.

하지만 왜 이렇게합니까? 사용자는 모든 옥텟이 지정되어 있지 않으면 변환 중에 오류가 발생할 것으로 예상합니다.

[bool]("10" -as [ipaddress]) #Outputs True 
+0

http://ilspy.net/을 사용하면 많은 질문에 답변 할 수 있습니다. 첫 번째 히트시에도 https://www.google.com/search?q=ipaddress+tryparse에 흥미로운 독서가 있습니다. –

답변

3

따르면

부품의 수 (각 부분이 마침표로 분리되어 https://msdn.microsoft.com/en-us/library/system.net.ipaddress.parse.aspx?f=255&MSPPError=-2147217396 행 : 그것은 이러한 전환이 가능하기 때문에 문자열이 유효한 IP 주소인지를 확인할 때 이와 같이 예기치 않은 결과를 얻을 수있다) in ipString은 IP 주소 구성 방법을 결정합니다. 한 부분 주소는 네트워크 주소에 직접 저장됩니다. 클래스 A 주소 지정에 편리한 두 부분 주소는 네트워크 주소의 맨 오른쪽 3 바이트에있는 첫 번째 바이트와 뒷부분에 선행 부분을 넣습니다. 클래스 B 주소 지정에 편리한 세 부분 주소는 첫 번째 부분을 두 번째 바이트의 두 번째 부분과 두 번째 부분의 마지막 부분을 네트워크 주소의 가장 오른쪽 두 바이트에 넣습니다.