You have an integer whose binary representation you’d like to print out, or a binary representation that you’d like to convert into an integer. You might want to do this if you were displaying non-textual data, such as what you get from interacting with certain system programs and functions.

To convert a Perl integer to a text string of ones and zeros, first
pack the integer into a number in network byte order^{[3]} (the `"N"`

format), then unpack it again
bit by bit (the `"B32"`

format).

sub dec2bin { my $str = unpack("B32", pack("N", shift)); $str =~ s/^0+(?=\d)//; # otherwise you'll get leading zeros return $str; }

To convert a text string of ones and zeros to a Perl integer, first massage the string by padding it with the right number of zeros, then just reverse the previous procedure.

sub bin2dec { return unpack("N", pack("B32", substr("0" x 32 . shift, -32))); }

We’re talking about converting between strings like
`"00100011"`

and numbers like 35. The string is the
binary representation of the number. We can’t solve either
problem with `sprintf`

(which doesn’t have a
“print this in binary” format), so we have to resort to
Perl’s `pack`

and `unpack`

functions for manipulating strings of data.

The
`pack`

and
`unpack`

functions act on strings. You can treat the
string as a series of bits, bytes, integers, long integers,
floating-point numbers in IEEE representation, checksums—
among other strange things. The `pack`

and
`unpack`

functions ...

Start Free Trial

No credit card required