http://qs321.pair.com?node_id=59110


in reply to (tye)Re: BigInt usage
in thread BigInt usage

Sounds fair to me, so I tried it - am I correct in using "L" instead of "N" in the unpack?

my @range = map { unpack "L", pack "C4", split /\./ } qw(10.0.0.0 10.1 +.0.0); print "@range\n"; # the numbers themselves print $range[1]-$range[0]+1, "\n"; # how many addresses for ($range[0]..$range[1]) { print join(".", unpack "C4", pack "N", $_), "\n"; }

When i do the above it reverses the input to 0.0.0.10 -> 0.0.1.10 I can fix this up I guess, but why is it doing that?

Am I using the wrong unpack data type?

Replies are listed 'Best First'.
Re: (tye)Re: BigInt usage
by ryan (Pilgrim) on Feb 17, 2001 at 15:12 UTC
    After some stuffing around I came up with a solution:

    The large integers are never a problem until the 'for' loop, so I just used the ACTUAL host count instead of the numbers representing each address, then added the original address representation that was subtracted when it is joined.

    I have limited the width of the range regardless because what I am doing with the IPs is fruitless when there are more than 1 million. So BigInt is useless anyway.

    my @range = map { unpack "N", pack "C4", split /\./ } $ARGV[0], $ARGV[ +1]; for (0..$range[1]-$range[0]) { print join(".", unpack "C4", pack "N", $_+$range[0]), "\n"; }
    I can't fault the code now, does exactly what I want in every case.

    Thanks.