从版本6转换以下IP的点分格式的最快方法是什么? 以冒号格式??
128.91.45.157.220.40.101.10.10.1.252.87.22.200.31.255
我只是随机输入上面的IP。
由于
答案 0 :(得分:6)
var result = new IPAddress(x.Split('.').Select(byte.Parse).ToArray()).ToString();
// result == "805b:2d9d:dc28:650a:a01:fc57:16c8:1fff"
答案 1 :(得分:2)
最快的方法是自己进行所有解析和转换。
这比使用Split
,Select
和IPAddress
的当前接受的答案快十倍以上:
string ip = "128.91.45.157.220.40.101.10.10.1.252.87.22.200.31.255";
StringBuilder b = new StringBuilder(8 * 4 + 7);
string hex = "0123456789abcdef";
int pos = 0;
for (int i = 0; i < 16; i++) {
int n = 0;
while (pos < ip.Length && ip[pos] != '.') {
n = n * 10 + (ip[pos++] - '0');
}
pos++;
b.Append(hex[n / 16]);
b.Append(hex[n % 16]);
if (i % 2 == 1 && i < 15) {
b.Append(':');
}
}
return b.ToString();
注意:此代码不会省略前导零,它总是生成一个包含八位四位数值的字符串。
这是我每次运行每次操作的次数:
Fast: 0,00038 ms.
Linq: 0,00689 ms.
答案 2 :(得分:1)
IPv6没有正式的“点缀”格式。您显示的字符串不是有效的IPv6地址...请坚持使用官方格式并遵循RFC 4291,如果可能,请遵循RFC 5952中的建议。使用其他格式将导致混淆和互操作性问题。