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 asperl
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 likesed
: 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). Soperl -lpe code
works likesed code
except that it'sperl
code as opposed tosed
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 ofunpack
. Seeperldoc -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
Post a Comment