C# - WinRT - 将存储为字节数组的IPv6地址转换为字符串

时间:2014-02-27 06:17:38

标签: c# windows-runtime ipv6

我有一个作为byte[16]数组提供的IPv6地址,我想将其转换为string(用于记录)。

我通常会使用System.Net.IPAddress构造函数在C#中实现这一点,但似乎{C} for WinRT / Windows Store中没有System.Net.IPAddress。有没有人有相同的方法来进行这种转换/格式化?

3 个答案:

答案 0 :(得分:0)

我相信Windows.Networking.HostNameIPAddress的替代品。

编辑:但我不确定您是否可以从byte[]创建一个。

另见:

答案 1 :(得分:0)

我通过使用冒号分隔符一次创建两个字节的完整IPv6字符串来手动解决此问题。然后,我将该字符串传递给Windows.Networking.HostName并访问它的DisplayName属性,该属性返回了压缩版本(即0000替换为0并且使用单个::替换,如果适用)。

至少HostName为我保存了一些的工作:)尽管如此,仍然感到遗憾的是没有完整的IPAddress替换:(

答案 2 :(得分:0)

将字节数组转换为有效的IPv6地址非常容易。

// Precondition: bytes.Length == 16
string ConvertToIPv6Address(byte[] bytes)
{
    var str = new StringBuilder();
    for (var i = 0; i < bytes.Length; i+=2)
    {
        var segment = (ushort)bytes[i] << 8 | bytes[i + 1];         
        str.AppendFormat("{0:X}", segment);
        if (i + 2 != bytes.Length)
        {
            str.Append(':');
        }           
    }

    return str.ToString();
}

折叠空片段更复杂一些,但除了显示目的之外通常不需要。