Самы хуткі спосаб пераўтварэння IPv6 пункцір радкі фармату ў фармат двукроп'е? C #

Які самы хуткі спосаб пераўтварэння пункцірнай фармату наступнага IP ад версіі 6 фармат тоўстай кішкі ??

128.91.45.157.220.40.101.10.10.1.252.87.22.200.31.255

Я проста набраў IP вышэй у выпадковым парадку.

дзякуй

3
Ня тэсціравалі: IPAdress.Parse (YourIP) .ToString()
дададзена аўтар Tim Schmelter, крыніца
@TimSchmelter: IPAddress.Parse не падтрымлівае дзіўныя карыстацкія фарматы, такія як «IPv6 пункцір фармат».
дададзена аўтар dtb, крыніца

3 адказы

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

Самы хуткі спосаб будзе рабіць усё сінтаксічны аналіз і пераўтварэнне самастойна.

Гэта больш чым у дзесяць разоў хутчэй, чым прыняты ў цяперашні час адказу, выкарыстоўваючы Разбіць , Выбраць і 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
дададзена
@Wajih: Я дадаў разы вышэй.
дададзена аўтар Guffa, крыніца
@ssg: Так, натуральна, гэта зойме больш часу, каб атрымаць больш хуткі код. Я не разумею, што вы маеце на ўвазе пад «якія падтрымліваюць стандарты» кода, хоць? Які стандарт будзе гэты код не адпавядае да?
дададзена аўтар Guffa, крыніца
@ssg: Што вы <б> значыць на "якія падтрымліваюць стандарты"? Які стандарт вы маеце на ўвазе?
дададзена аўтар Guffa, крыніца
@ssg: Тым не менш, пасля таго, як год думаць пра гэта? ;)
дададзена аўтар Guffa, крыніца
@ssg - Калі вы збіраецеся скардзіцца, што «разабраць яго самастойна» код не адпавядае стандартам, як у якасці бібліятэкі класа IPAddress, то вы павінны адкінуць увесь гэтае пытанне. «IPv6 пункцір абазначэння» не адпавядае стандартам, але ўся сутнасць гэтага пытання і адказу Guffa ст.
дададзена аўтар Jesse Chisholm, крыніца
@Guffa - Калісьці ў Інтэрнэце, ён ніколі не памірае. :) Я толькі што нагадаў StackExchange аб гэтай тэме, і што я не заўважыў на ім некаторы час. :) :) :)
дададзена аўтар Jesse Chisholm, крыніца
Калі ласка, не забудзьцеся дадаць час для адладкі патэнцыйных памылак у ізноў створанага код, а не шырока правераныя, стабільныя, адпаведныя стандарты код. Калі вы атрымліваеце, што, тысячы другі і атрымаць 5 гадзін прастою у сваю чаргу, у чым справа?
дададзена аўтар Sedat Kapanoglu, крыніца
@Guffa: Я не ведаю, таму што ваш код не ўключае ў сябе модульныя тэсты або спецыфікацыі. Але тое, што я ведаю, што IPAddress клас адпавядае стандартам. Больш аднарангавыя код азначае больш абслугоўвання. Я цаню намаганні, каб атрымаць найбольш хуткі код, хоць. Я проста паказваючы на ​​тое, што гэта можа быць не заўсёды эканоміць час, каб выкарыстоўваць «хуткі» код.
дададзена аўтар Sedat Kapanoglu, крыніца
@Guffa я думаў, што пункцірныя абазначэнне будзе мець RFC для яго. Па-відаць, няма. Але мае каментары з нагоды «хутка не заўсёды самы хуткі" код »варта. Часовыя распрацоўшчыкі трацяць разуменне ўнутранай механікі тут ёсць патэнцыял стварэння больш накладных выдаткаў.
дададзена аўтар Sedat Kapanoglu, крыніца
@JesseChisholm я быў на самай справе спрачацца з пастаўленым пытаннем. OP вызначана прапусціў «час, які затрачваецца на адладку аднарангавыя кода» частку. Што дрэннага аб паказваючы, што па-за домам?
дададзена аўтар Sedat Kapanoglu, крыніца
@Guffa Джэсі выклікалі мае ўспаміны :)
дададзена аўтар Sedat Kapanoglu, крыніца
Вы кажаце, што ў 10 разоў хутчэй, любыя тэсты, якія вы павінны падзяліцца ??
дададзена аўтар user349026, крыніца

Там няма афіцыйнай «кропкава» фармат для IPv6. Радок вы паказваеце не правільны адрас IPv6 ... Калі ласка, прытрымвайцеся афіцыйных фарматаў і прытрымлівацца RFC 4291 і, калі гэта магчыма рэкамендацыя ў RFC 5952. Выкарыстанне іншых фарматаў можа прывесці да блытаніны і ўзаемадзеянню праблем.

1
дададзена