我有一個作爲byte[16]
陣列提供的IPv6地址,我想將其轉換爲string
(用於記錄日誌)。C# - WinRT - 將存儲爲字節數組的IPv6地址轉換爲字符串
我通常會在C#中使用System.Net.IPAddress
構造函數實現此目的,但似乎System.Net.IPAddress
在C#中不適用於WinRT/Windows應用商店。有沒有人有一個等效的方式來做這種轉換/格式?
我有一個作爲byte[16]
陣列提供的IPv6地址,我想將其轉換爲string
(用於記錄日誌)。C# - WinRT - 將存儲爲字節數組的IPv6地址轉換爲字符串
我通常會在C#中使用System.Net.IPAddress
構造函數實現此目的,但似乎System.Net.IPAddress
在C#中不適用於WinRT/Windows應用商店。有沒有人有一個等效的方式來做這種轉換/格式?
我手動解決了這個由剛剛在結腸分隔符時創建完整的IPv6串兩個字節。然後,我將該字符串傳遞給Windows.Networking.HostName,並訪問它的DisplayName屬性,該屬性讓我回到了壓縮版本(即0000替換爲0,如果適用,則替換爲單個::替換)。
至少要包含hostname救了我工作的一些 :)它仍然是一個恥辱,沒有一個完整的ip地址替換雖然:(
謝謝,我也看了Windows.Networking.Hostname - 但我仍然不清楚如何使用這個字節數組,並以IPv6地址的字符串表示結束:(使用System.Net更容易。 IP地址 – DaveUK
轉換一個字節數組有效的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();
}
合攏空段是一個涉及多一點,但一般不需要比顯示目的的任何其他。
哦,我知道有一個很長的方式來做到這一點(通過查找.NET反射鱈魚e爲IPAddress.ToString()),並看到MS如何處理這個內部),但我希望找到已經內置到C#的東西。 – DaveUK