ASCII To Binary And Binary To ASCII Conversion Tools?


Answer :

$ echo AB | perl -lpe '$_=unpack"B*"' 0100000101000010 $ echo 0100000101000010 | perl -lpe '$_=pack"B*",$_' AB 
  • -e expression evaluate the given expression as perl code
  • -p: sed mode. The expression is evaluated for each line of input, with the content of the line stored in the $_ variable and printed after the evaluation of the expression.
  • -l: even more like sed: instead of the full line, only the content of the line (that is, without the line delimiter) is in $_ (and a newline is added back on output). So perl -lpe code works like sed code except that it's perl code as opposed to sed code.
  • unpack "B*" works on the $_ variable by default and extracts its content as a bit string walking from the highest bit of the first byte to the lowest bit of the last byte.
  • pack does the reverse of unpack. See perldoc -f pack for details.

With spaces:

$ echo AB | perl -lpe '$_=join " ", unpack"(B8)*"' 01000001 01000010 $ echo 01000001 01000010 | perl -lape '$_=pack"(B8)*",@F' AB 

(it assumes the input is in blocks of 8 bits (0-padded)).

With unpack "(B8)*", we extract 8 bits at a time, and we join the resulting strings with spaces with join " ".


You can use xxd to convert from ASCII and binary.

$ echo -n "A" | xxd -b 0000000: 01000001                                               A  $ echo -n "A" | xxd -b | awk '{print $2}' 01000001 

Converting bases

If you're looking to do just base conversions between Hex, Octal, & Dec I usually use the basic calculator command line tool (bc) to do such things. Note that bc is always very picky about the correct order of bases: you have to specify the resulting base (obase) first, then add your choice of ibase.

$ echo "obase=2; ibase=16; A" | bc 1010  $ echo "obase=16; ibase=2; 1010" | bc A 

Using bc and bash:

#!/bin/bash  chrbin() {         echo $(printf \\$(echo "ibase=2; obase=8; $1" | bc)) }  ordbin() {   a=$(printf '%d' "'$1")   echo "obase=2; $a" | bc }  ascii2bin() {     echo -n $* | while IFS= read -r -n1 char     do         ordbin $char | tr -d '\n'         echo -n " "     done }  bin2ascii() {     for bin in $*     do         chrbin $bin | tr -d '\n'     done } ascii2bin "This is a binary message" bin2ascii 01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101101 01100101 01110011 01110011 01100001 01100111 01100101 

Comments

Popular posts from this blog

Are Regular VACUUM ANALYZE Still Recommended Under 9.1?

Can Feynman Diagrams Be Used To Represent Any Perturbation Theory?