in reply to How turn a huge decimal number to binary
You could do something like
#!/usr/bin/perl use bigint; sub split32 { my $v = shift; my $n = shift; my $mask = 0xffffffff; my @b32; for (1..$n) { unshift @b32, $v & $mask; $v >>= 32; } return @b32; } my $n = 2; # n x 32-bit my $v = 1024; for (1..6) { print unpack("B*", pack("N$n", split32($v, $n) )), "\n"; $v *= 1024; }
Prints
0000000000000000000000000000000000000000000000000000010000000000 0000000000000000000000000000000000000000000100000000000000000000 0000000000000000000000000000000001000000000000000000000000000000 0000000000000000000000010000000000000000000000000000000000000000 0000000000000100000000000000000000000000000000000000000000000000 0001000000000000000000000000000000000000000000000000000000000000
I've set the width to 64 bit in the example (to avoid line wrapping...), but in principle, you can also use larger widths, e.g. $n = 8 for 256 bits. Also, $v can of course be any integer number, and must not necessarily be a power of 1024.
Update: BTW, don't indiscriminately enable bigint for your entire program... it can slow down things considerably! Limit its scope to where you really need it — by putting extra blocks around those sections:
{ use bigint; # code that needs it... } # other code...
|
|---|