SORU
20 Ocak 2009, Salı


C bir tamsayı IPv4 adresi dönüştürmek için nasıl*?

Bir Tamsayı standart IPv4 adresi dönüştürme işlevi arıyorum. Bonus tersini yapacak bir fonksiyon için kullanılabilir puan.

Çözüm C olmalıdır#.

CEVAP
20 Ocak 2009, Salı


32-bit işaretsiz tamsayıIPv4 adresleri. Bu arada IPAddress.Address özelliği, itiraz ederken, bir Int64 verir, işaretsiz 32-bit değeri IPv4 adresi (yakalamak, ağ bayt sırası, böylece ihtiyacınız için takas civarında).

Örneğin, benim yerel google.com 64.233.187.99. Eşdeğer:

64*2^24   233*2^16   187*2^8   99
= 1089059683

Ve gerçekten de, http://1089059683/ işler beklendiği gibi (en azından Windows, IE, Firefox ve Chrome ile test; iPhone etmez).

İşte her iki dönüşüm, ağ/host bayt değiştirme dahil göstermek için bir test programı:

using System;
using System.Net;

class App
{
    static long ToInt(string addr)
    {
        // careful of sign extension: convert to uint first;
        // unsigned NetworkToHostOrder ought to be provided.
        return (long) (uint) IPAddress.NetworkToHostOrder(
             (int) IPAddress.Parse(addr).Address);
    }

    static string ToAddr(long address)
    {
        return IPAddress.Parse(address.ToString()).ToString();
        // This also works:
        // return new IPAddress((uint) IPAddress.HostToNetworkOrder(
        //    (int) address)).ToString();
    }

    static void Main()
    {
        Console.WriteLine(ToInt("64.233.187.99"));
        Console.WriteLine(ToAddr(1089059683));
    }
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • humanHardDrive

    humanHardDri

    16 Mart 2011
  • stokelycalm

    stokelycalm

    28 Aralık 2010
  • talkandroid

    talkandroid

    27 Mayıs 2010