我有一个作为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