#!/usr/bin/perl use warnings; use strict; my $sampleDecimal = "02911"; my $uint16 = pack 'n', $sampleDecimal; my $decimal = unpack 'n', $uint16; print "Decimal: " . $decimal . "\n"; my $binaryStr = desimalToBinary( $sampleDecimal , 16 , 'n' ); print "Binary: " . $binaryStr . "\n"; my $decimalStr = binaryToDecimal( $binaryStr , 16 , 'n' ); print "Decimal from binary: " . $decimalStr . "\n"; sub binaryToDecimal { my $binary = shift; my $bitSize = shift; my $template = shift; return unpack($template, pack("B$bitSize", substr("0" x $bitSize . $binary, -$bitSize))); } sub desimalToBinary { my $decimal = shift; my $bitSize = shift; my $template = shift; my $bitStr = unpack("B$bitSize", pack($template, $decimal)); $bitStr =~ s/^0+(?=\d)//; # otherwise you'll get leading zeros return $bitStr; } __END__ Decimal: 2911 Binary: 101101011111 Decimal from binary: 2911