2014-02-27 59 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(); 
} 

合攏空段是一個涉及多一點,但一般不需要比顯示目的的任何其他。

相關問題