#!/bin/sh # This script translates any text into a sequence of hex ASCII codes. # usual dd/sh intro PATH='' dd=/bin/dd rm=/bin/rm tmp=/tmp/ascii2hex.$$ trap "$rm -f $tmp.?" 0 1 2 3 false () { return 1 } true () { return 0 } # ASCII conversion table conv09=' ' conv20=' ' conv21='!' conv22='"' conv23='#' conv24='$' conv25='%' conv26='&' conv27="'" conv28='(' conv29=')' conv2A='*' conv2B='+' conv2C=',' conv2D='-' conv2E='.' conv2F='/' conv30='0' conv31='1' conv32='2' conv33='3' conv34='4' conv35='5' conv36='6' conv37='7' conv38='8' conv39='9' conv3A=':' conv3B=';' conv3C='<' conv3D='=' conv3E='>' conv3F='?' conv40='@' conv41='A' conv42='B' conv43='C' conv44='D' conv45='E' conv46='F' conv47='G' conv48='H' conv49='I' conv4A='J' conv4B='K' conv4C='L' conv4D='M' conv4E='N' conv4F='O' conv50='P' conv51='Q' conv52='R' conv53='S' conv54='T' conv55='U' conv56='V' conv57='W' conv58='X' conv59='Y' conv5A='Z' conv5B='[' conv5C='\' conv5D=']' conv5E='^' conv5F='_' conv60='`' conv61='a' conv62='b' conv63='c' conv64='d' conv65='e' conv66='f' conv67='g' conv68='h' conv69='i' conv6A='j' conv6B='k' conv6C='l' conv6D='m' conv6E='n' conv6F='o' conv70='p' conv71='q' conv72='r' conv73='s' conv74='t' conv75='u' conv76='v' conv77='w' conv78='x' conv79='y' conv7A='z' conv7B='{' conv7C='|' conv7D='}' conv7E='~' # create two conversion functions hex_to_char () { eval char='$'conv$1 } char_to_hex () { # I never said anywhere it needs to be fast for upper in 0 1 2 3 4 5 6 7 do for lower in 0 1 2 3 4 5 6 7 8 9 A B C D E F do eval char='$'conv$upper$lower case "$char" in "$1") hex=$upper$lower; return ;; esac done done hex=00 } # read the text go=true while $go do len="`$dd bs=1 count=1 of=$tmp.a 2>&1`" case "$len" in 0*) go=false ;; *) char="`$dd if=$tmp.a bs=1 count=1 2>/dev/null`" case "$char" in ?) char_to_hex "$char" ;; *) hex=0A ;; esac echo $hex ;; esac done