繁体   English   中英

将IPv6点阵格式字符串转换为冒号格式的最快方法? C#

[英]Fastest way of converting IPv6 dotted format string to colon format ? C#

将以下IP的虚线格式从版本6转换为冒号格式的最快方法是什么?

128.91.45.157.220.40.101.10.10.1.252.87.22.200.31.255

我只是随机输入上面的IP。

谢谢

var result = new IPAddress(x.Split('.').Select(byte.Parse).ToArray()).ToString();
// result == "805b:2d9d:dc28:650a:a01:fc57:16c8:1fff"

最快的方法是自己进行所有解析和转换。

这比使用SplitSelectIPAddress的当前接受的答案快十倍以上:

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.

IPv6没有正式的“点缀”格式。 您显示的字符串不是有效的IPv6地址...请坚持使用官方格式并遵循RFC 4291,如果可能,请遵循RFC 5952中的建议。使用其他格式将导致混淆和互操作性问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM