Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > IPAddress.Address


Автор: Jlekc 12.5.2005, 22:47
мне нуна перебирать АйПи в комта диапазоне, логично было б написать нечто подобное:
Код

IPAddress ip = IPAddress.Parse("127.0.0.1");
ip.Address++;


но ip.Address представлен как:
Код

127+0*255+....

а не как
Код

1+0*255+0*255*255+...


розложить на состовные не проблема, но мож есть красивее способ?

Автор: redrick 12.5.2005, 23:49
ИМХО быстрее разложить чем постить на форум =)

Автор: Jlekc 13.5.2005, 00:16
Цитата(redrick @ 12.5.2005, 23:49)
ИМХО быстрее разложить чем постить на форум =)

быть может, но я не спешу.

ну а насчет разложить:
1) разложить на состовные
2) проинкрементить и сделать проверку на переход в следуший регистр
3) сложить

ТУПО, много лишнего кода((,
на VC данных проблем бы небыло, но решил поучить C#, мля почему они адресс так собрали smile

я тут подумываю как ткое на асме прокрутить мож полутиться (кстати в C# вставки асма мона делать?, или нуна длл-ку написать на комта другом языке?)

Автор: mr.DUDA 13.5.2005, 09:36
Вот, если лениво самому писать, пример:
Код
using System;
using System.Net;

namespace Demo
{
    public class IPAddressManipulator
    {
        IPAddress _ia;
        public IPAddress Address
        {
            get
            {
                return _ia;
            }
        }

        public IPAddressManipulator(IPAddress addr) {_ia=addr;}

        public static IPAddressManipulator operator++ (IPAddressManipulator addr)
        {
            byte [] b = addr._ia.GetAddressBytes();
            if(b[3]==255)
            {
                b[3]=0;
                if(b[2]==255)
                {
                    b[2]=0;
                    if(b[1]==255)
                    {
                        b[1]=0;
                        if(b[0]==255) 
                            b[0]=0;
                        else
                            b[0]++;
                    }
                    else b[1]++;
                }
                else b[2]++;
            }
            else
                b[3]++;
            
            addr._ia = IPAddress.Parse(string.Format("{0}.{1}.{2}.{3}", b[0], b[1], b[2], b[3]));
            return addr;
        }
    }

    public class DemoTest
    {
        [STAThread]
        public static void Main()
        {
            IPAddress addr = IPAddress.Parse("127.0.0.1");
            IPAddressManipulator man = new IPAddressManipulator(addr);
            man++;
            man++;
            string result = man.Address.ToString();
        }
    }
}


З.Ы. свойство IPAddress.Address помечено в MSDN как obsolete, так что скорее всего в .NET 2.0 его не будет, так что я не стал бы расчитывать на него. Сделано это не от хорошей жизни, а потому что в IPAddress введена поддержка IPv6.

Автор: Jlekc 13.5.2005, 16:38
псиб)

а что насчет _asm-a??
ведь АйПи (8 байт) и его мона было б загнать в ЕАХ, считывания происходит с верхнего разряда.
представления в регистри будет то что нуна, его и инкать. Ток чот не получаеться описать вставки асма в Шарпе((, он держет? мона сампл?

Автор: Jlekc 13.5.2005, 17:31
хых, ну это уже на чот похоже, а то раскладывать, раскладывать
Код

#define BSWAP_DW(x)  (((x>>24)&0x000000FFUL) | ((x<<24)&0xFF000000UL)  |  ((x>>8) &0x0000FF00UL) | ((x<<8) &0x00FF0000UL) )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)