Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

One-liner ascii/bin

by Rolf (Novice)
on Nov 10, 2001 at 22:03 UTC ( [id://124580]=perlquestion: print w/replies, xml ) Need Help??

Rolf has asked for the wisdom of the Perl Monks concerning the following question:

Hi friends, I once had two one-liners which converted a string to bin and vice versa. But I lost them togeher with my HD and I am not any good at Perl. Any help would be appriciated. Rolf

Replies are listed 'Best First'.
Re (tilly) 1: One-liner ascii/bin
by tilly (Archbishop) on Nov 11, 2001 at 07:29 UTC
    What do you mean by bin?

    There are many possible things you could mean, and they have very different answers. For instance you could be looking for an encryption module, of which there are several on CPAN. Or you might be looking for pack and unpack. If you are on Windows try this:

    perl -ne "print unpack("B*", $_)" input_file > output_file
    (Use single quotes on Unix.)

    You can reverse it with:

    perl -ne "print pack("B*", $_)" input_file > output_file
    See pack, unpack, and perlrun for more.
Re: One-liner ascii/bin
by jj808 (Hermit) on Nov 11, 2001 at 09:25 UTC
    My assumption was that you wanted binary to decimal conversion. If so, try these:
    Binary to Decimal: perl -e 'for(split//,$ARGV[0]){$t+=$_;$t=$t<<1};$t=$t>>1;print "$t\n"' + 101010 Decimal to Binary: perl -e '$t=$ARGV[0];do{push@b,$t%2;$t=$t>>1}until($t==0);print revers +e"\n",@b' 42

    Cheers,

    JJ

      perl -e 'print oct"0b$ARGV[0]","\n"' 101010
      perl -e 'printf"%b\n",@ARGV' 42
Re: One-liner ascii/bin
by Rolf (Novice) on Nov 12, 2001 at 16:42 UTC
    I am sorry I am not able to express myself better. What I am trying to explain is this: I write something like Perl -e ... "Rolf" and it comes out like this: 01010010011011110110110001100110 and if I use the 01's as argument in another one-liner I get the output: Rolf Thank you for your efforts and sorry about me not explaining it better Regards Rolf
      All the pieces were there in the thread. I simply rearranged them...
      #!/usr/bin/perl -wT use strict; my $bin = ascii2bin('Rolf'); my $ascii = bin2ascii($bin); print "bin => $bin\n"; print "ascii => $ascii\n"; sub ascii2bin { my $ascii = shift; my $bin = join '', map {sprintf "%08b", ord($_)} split //, $ascii; return $bin; } sub bin2ascii { my $bin = shift; my $ascii = join '', map {chr(oct"0b$_")} $bin =~ /(\d{8})/g; return $ascii; } =OUTPUT bin => 01010010011011110110110001100110 ascii => Rolf

      Or, as one-liners.....

      perl -le 'print join"",map{sprintf"%08b",ord($_)}split//,pop' Rolf perl -le 'print join"",map{chr(oct"0b$_")}pop=~/(\d{8})/g' 01010010011 +011110110110001100110

      -Blake

        perl -e 'print unpack"B*",shift' Rolf
        perl -e 'print pack"B*",shift' 01010010011011110110110001100110
        Hi, You are getting a lot closer now. (With the last two onliners.) I get a "Can't find string terminator "'" anywhere before EOF at -e line 1." when trying them. But they do look a bit like the ones I lost. Regards Rolf

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://124580]
Approved by root
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others wandering the Monastery: (3)
As of 2024-09-19 17:36 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    The PerlMonks site front end has:





    Results (25 votes). Check out past polls.

    Notices?
    erzuuli‥ 🛈The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.