2014-02-27 58 views
1

我有一个作为byte[16]阵列提供的IPv6地址,我想将其转换为string(用于记录日志)。C# - WinRT - 将存储为字节数组的IPv6地址转换为字符串

我通常会在C#中使用System.Net.IPAddress构造函数实现此目的,但似乎System.Net.IPAddress在C#中不适用于WinRT/Windows应用商店。有没有人有一个等效的方式来做这种转换/格式?

+0

哦,我知道有一个很长的方式来做到这一点(通过查找.NET反射鳕鱼e为IPAddress.ToString()),并看到MS如何处理这个内部),但我希望找到已经内置到C#的东西。 – DaveUK

回答

0

我手动解决了这个由刚刚在结肠分隔符时创建完整的IPv6串两个字节。然后,我将该字符串传递给Windows.Networking.HostName,并访问它的DisplayName属性,该属性让我回到了压缩版本(即0000替换为0,如果适用,则替换为单个::替换)。

至少要包含hostname救了我工作的一些 :)它仍然是一个耻辱,没有一个完整的ip地址替换虽然:(

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(); 
} 

合拢空段是一个涉及多一点,但一般不需要比显示目的的任何其他。

相关问题