Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么.NET不使用嵌入的IPv4值解析某些IPv6?_C#_.net_.net 4.5_Ip Address_Ipv6 - Fatal编程技术网

C# 为什么.NET不使用嵌入的IPv4值解析某些IPv6?

C# 为什么.NET不使用嵌入的IPv4值解析某些IPv6?,c#,.net,.net-4.5,ip-address,ipv6,C#,.net,.net 4.5,Ip Address,Ipv6,在我的计算机中,此代码: var someIps = new[] { "::1.2.3.4", "::0000:1.2.3.4", "0:0:0:0:0:0:0000:1.2.3.4", "1::0000:1.2.3.4", "0000:0000:0000:0000:0000:0000:0000:1.2.3.4", "::

在我的计算机中,此代码:

        var someIps = new[]
        {
            "::1.2.3.4",
            "::0000:1.2.3.4",
            "0:0:0:0:0:0:0000:1.2.3.4",
            "1::0000:1.2.3.4",
            "0000:0000:0000:0000:0000:0000:0000:1.2.3.4",
            "::abcd:1.2.3.4",
            "0:0:0:0:0:0:abcd:1.2.3.4",
            "1::abcd:1.2.3.4",
            "0000:0000:0000:0000:0000:0000:abcd:1.2.3.4",
            "::ffff:1.2.3.4",
            "0:0:0:0:0:0:ffff:1.2.3.4",
            "1::ffff:1.2.3.4",
            "0001:0000:0000:0000:0000:0000:ffff:1.2.3.4",
        };

        foreach ( var ip in someIps )
        {
            if (IPAddress.TryParse( ip, out var parsed ))
                Console.WriteLine( "{0} parses to {1}", ip, parsed );
            else
                Console.WriteLine( "{0} does not parse.", ip, parsed );
        }
生成此输出:

::1.2.3.4 parses to ::1.2.3.4
::0000:1.2.3.4 parses to ::1.2.3.4
0:0:0:0:0:0:0000:1.2.3.4 does not parse.
1::0000:1.2.3.4 parses to 1::102:304
0000:0000:0000:0000:0000:0000:0000:1.2.3.4 does not parse.
::abcd:1.2.3.4 parses to ::abcd:102:304
0:0:0:0:0:0:abcd:1.2.3.4 does not parse.
1::abcd:1.2.3.4 parses to 1::abcd:102:304
0000:0000:0000:0000:0000:0000:abcd:1.2.3.4 does not parse.
::ffff:1.2.3.4 parses to ::ffff:1.2.3.4
0:0:0:0:0:0:ffff:1.2.3.4 does not parse.
1::ffff:1.2.3.4 parses to 1::ffff:102:304
0001:0000:0000:0000:0000:0000:ffff:1.2.3.4 does not parse.
为什么它解析
::ffff:1.2.3.4
,但不能解析
0:0:0:0:0:ffff:1.2.3.4
?他们不应该是同一个地址吗


IPv6表示中是否缺少使这些字符串无效的内容?还是我刚刚在[IPAddress.TryParse][1]中发现了一个bug?

您在完整的书面行中有一个错误。它应该是8组十六进制数。然而,0:0:0:0:0:0:ffff仅为7组-6个0组,1个f组

事实上,像这样的数字只有6组: 0001:0000:0000:0000:0000:ffff-1 01组,4 0组,1 f组


只是一个经典的错误,重复似乎让你忽略了一些东西。

我发现了我的错误。问题是IPv4最终采用了IPv6表示法中的两组十六进制数字,我直觉地认为这只是一组


因此,IPv4之前有7个组的术语(如
0:0:0:0:0:0:1.2.3.4
)将无法解析。但是,像
0:0:0:0:0:0:1.2.3.4
这样的术语,只要6组就可以解析了。

谢谢。我只是提供了一个更明确的解释,引用IPv4号码。