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...
In reply to Re: How turn a huge decimal number to binary
by almut
in thread How turn a huge decimal number to binary
by xiaoyafeng
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |