Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re: Encode and decode binary-coded decimals

by jryan (Vicar)
on Oct 08, 2002 at 16:59 UTC ( #203693=note: print w/ replies, xml ) Need Help??


in reply to Encode and decode binary-coded decimals

I tried all of your snippets, and none seemed to work. For instance:

perl -le 'print join " ", map {ord pack "H2", $_} shift =~ /../g' 396

I'd expect to get: 0011 1001 0110, but instead I get 57, which isn't very binary at all :)

Similarly with decode:

perl -le 'print unpack "H*", pack "C*", @ARGV' 0011 1001 0110

Results in 0be96e (hex!) instead of 396.

These should work:

# encode perl -e 'print sprintf("%04b ",$_) for shift =~ /\d/g' decimal #decode perl -e '$p=1; map{$l+=oct("0b$_")*$p;$p*=10} reverse @ARGV; print $l' + bcddigit1 bcddigit2 etc

Update: Updated decoder to use 5.6.1's oct("0b") feature instead of the old perlfaq way to convery binary to decimal.


Comment on Re: Encode and decode binary-coded decimals
Select or Download Code
Re: Re: Encode and decode binary-coded decimals
by jmcnamara (Monsignor) on Oct 08, 2002 at 17:44 UTC

    In the first case you need to use 0396 instead of 396. That's what the comment about "zero padding" refers to.
    $ perl -le 'print join " ", map {ord pack "H2", $_} shift =~ /../g +' 0396 3 150

    I'd expect to get: 0011 1001 011

    That is at odds with my expectation.:-) Nevertheless, it isn't too difficult to change these routines to support other ascii, hex or binary representations.

    --
    John.

      My definition of BCD is similar to this, but maybe you are referring to something different? :)

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://203693]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (9)
As of 2015-07-05 21:29 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (68 votes), past polls