IPv6 nuqtali formatli mag'lubiyatni nuqta formatiga aylantirishning eng tezkor usuli? C #

Quyidagi IP ning nuqta formatini 6-versiyadan aylantirishning eng tezkor usuli qanday? kolon formatiga o'tish

128.91.45.157.220.40.101.10.10.1.252.87.22.200.31.255

IPni tasodifan yuqoriga qo'ydim.

Rahmat

3
Viktorina qilinmagan: IPAdress.Parse (YourIP) .toString()
qo'shib qo'ydi muallif Tim Schmelter, manba
@TimSchmelter: IPAddress.Parse "IPv6 nuqta formati" kabi g'alati maxsus formatlarni qo'llab-quvvatlamaydi.
qo'shib qo'ydi muallif dtb, manba

3 javoblar

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

Eng tezkor tarzda barcha tahlillarni o'tkazish va o'zingizni o'zgartirish kerak.

Bu Split , Select va IPAddress dan foydalanib, qabul qilingan javobdan o'n martadan ortiqroq.

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();

Eslatma: Ushbu kod etakchi nollarni tark etmaydi, u har doim sakkizta to'rtta raqamli qiymatga ega bo'lgan mag'lubiyat hosil qiladi.

Tahrirlash:

Har bir operatsiyani bajarish vaqti - har bir million marta ishlay boshlaydi:

Fast: 0,00038 ms.
Linq: 0,00689 ms.
2
qo'shib qo'ydi
@Wajih: Yuqoridagi vaqtlarni qo'shdim.
qo'shib qo'ydi muallif Guffa, manba
@ssg: Ha, tabiiyki, tezroq kodni olish ko'proq vaqt talab etadi. Men "standartlarga mos" kodi bilan nimani nazarda tutganingizni ko'rmayapmanmi? Ushbu kod qanday standartga mos kelmaydi?
qo'shib qo'ydi muallif Guffa, manba
@sg: "standartlarga muvofiq" deb o'rtacha nimani anglatadi? Qaysi standartga ishora qilasiz?
qo'shib qo'ydi muallif Guffa, manba
@ssg: Shunday bo'lsa-da, bir yildan keyin bu haqda o'ylayapsizmi? ;)
qo'shib qo'ydi muallif Guffa, manba
@ssg - Agar siz "o'zingizni tahlil qilsangiz", shikoyat qilmoqchi bo'lsangiz, kod IPAddress kutubxonasi sinfiga mos keladigan standartlardagina emas, keyin butun bu savolni rad etishingiz kerak. "IPv6 nuqta belgisi" standartlarga mos kelmaydi, ammo bu savolning butun nuqtasi va Guffaning javobidir.
qo'shib qo'ydi muallif Jesse Chisholm, manba
@Guffa - Biror narsa Internetda bo'lsa, u hech qachon o'lmaydi. :) Men bu mavzu haqida faqat StackExchange tomonidan eslatib o'tdim va bir muncha vaqt ichida bu haqda izoh bermaganman. :) :) :)
qo'shib qo'ydi muallif Jesse Chisholm, manba
Iltimos, yangi yaratilgan kodda potentsial xatolarni disk raskadrovka uchun vaqtni qo'shishni unutmang, keng tarqalgan sinab ko'rilgan, barqaror, standartlarga mos keladigan kod. Agar siz ming santimetrlik natijaga erishsangiz va 5 soatlik ishdan bo'shatilsa, bu nimani anglatadi?
qo'shib qo'ydi muallif Sedat Kapanoglu, manba
@Guffa: Bilmayman, chunki sizning kodingizda birlik sinovlari yoki ko'zoynaklar mavjud emas. Lekin shuni bilamanki, IPAddress sinflari standartlarga mos keladi. Qo'shimcha vaqtinchalik kod ko'proq parvarishlash ma'nosini anglatadi. Eng tezkor kodni olish uchun harakatni qadrlayman. Men faqatgina "eng tezkor" kodni ishlatish uchun vaqtni tejash qilmasligimga ishora qilyapman.
qo'shib qo'ydi muallif Sedat Kapanoglu, manba
@Guffa I nuqta belgisi, bu uchun QRX bo'lardi deb o'yladim. Ehtimol, bunday emas. Lekin "eng tezkor" kodlar bilan bog'liq bo'lgan sharhlarim "turadi. Ichki mexanikani tushunish uchun vaqtni ishlab chiquvchilar bu erda ko'proq yuk yaratish imkoniyatlariga ega.
qo'shib qo'ydi muallif Sedat Kapanoglu, manba
@JesseChisholm Men aslida so'ralgan savol bilan bahslashdim. OP, "vaqtinchalik kodni disk raskadrovka uchun sarflangan vaqt" qismini aniq o'tkazib yubordi. Bunga ishora qilish haqida nima deb o'ylaysiz?
qo'shib qo'ydi muallif Sedat Kapanoglu, manba
@Guffa Jesse mening xotiralarimni tetikladi :)
qo'shib qo'ydi muallif Sedat Kapanoglu, manba
Siz 10 marotaba tezroq aytasiz, baham ko'rishingiz kerak bo'lgan har qanday mezon
qo'shib qo'ydi muallif user349026, manba

IPv6 uchun rasmiy "nuqtali" format mavjud emas. Siz ko'rsatadigan magistral haqiqiy IPv6 manzili emas ... Iltimos, rasmiy formatlarga tayanib, RFC 4291 va agar iloji bo'lsa, QRM 5952-da berilgan tavsiyalarga rioya qiling. Boshqa formatlarni ishlatish chalkashlik va birgalikda ishlash muammolarini keltirib chiqaradi.

1
qo'shib qo'ydi