I'd like to convert ASCII code (like - or _ or . etc) in hexadecimal representation in Unix shell (without bc command), eg : - => %2d
any ideas ?
I'd like to convert ASCII code (like - or _ or . etc) in hexadecimal representation in Unix shell (without bc command), eg : - => %2d
any ideas ?
This works in Bash, Dash (sh), ksh, zsh and ash and uses only builtins:
Edit:
Here is a version of ord that outputs in hex and chr that accepts hex input:
ordhex ()
{
printf '%x' "'$1"
}
chrhex ()
{
printf \\x"$1"
}
The original decimal versions:
ord ()
{
echo -n $(( ( 256 + $(printf '%d' "'$1"))%256 ))
}
Examples (with added newlines):
$ ord ' '
32
$ ord _
95
$ ord A
65
$ ord '*'
42
$ ord \~
126
Here is the corresponding chr
:
chr ()
{
printf \\$(($1/64*100+$1%64/8*10+$1%8))
}
Examples:
$ chr 125
}
$ chr 42
*
$ chr 0 | xxd
0000000: 00 .
$ chr 255 | xxd
0000000: ff .
python -c 'import sys; print "{0:02x}".format(ord(sys.argv[1]))' '_'
or
python -c 'print "{0:02x}".format(ord("_"))'
I agree that it's not the nicest one-liner, but I couldn't resist after seeing the Perl based answer .