我有一个作为byte[16]
数组提供的IPv6地址,我想将其转换为string
(用于记录)。
我通常会使用System.Net.IPAddress
构造函数在C#中实现这一点,但似乎{C} for WinRT / Windows Store中没有System.Net.IPAddress
。有没有人有相同的方法来进行这种转换/格式化?
答案 0 :(得分:0)
答案 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();
}
折叠空片段更复杂一些,但除了显示目的之外通常不需要。