http://www.perlmonks.org?node_id=994166


in reply to Binary Coded Decimal

perl pack bcd -> BCD Clock built using only binary logic., Encoding BCD

so

sub encode_BCD { return pack 'H*', join '', @_ }

If you need to ensure < 99 , or dealing with signs properly, you'll have to add that part

Seems to work https://en.wikipedia.org/wiki/Binary_coded_decimal

-1,234,56 0001 0010 0011 0100 0101 0110 0111 1101 1 2 3 4 5 6 7 - $ perl -le " print join q/ /, split /....\K/, unpack q/B*/, pack q/H*/ +, q/1234567-/ " 0001 0010 0011 0100 0101 0110 0111 1101 $ perl -le " print join q/ /, unpack q/(A4)*/, unpack q/B*/, pack q/H* +/, q/1234567-/ " 0001 0010 0011 0100 0101 0110 0111 1101