• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 6252
  • Last Modified:

Char to hex and hex to char in shell

Hi experts,

The following printf command converts a char to a hex value:

$ printf "%x" a
61

How can I conver this 61 back to "a" by using printf or any shell command?

Thanks

0
myrizvi
Asked:
myrizvi
  • 3
  • 3
  • 3
  • +1
1 Solution
 
ahoffmannCommented:
which shell are you using?
0
 
myrizviAuthor Commented:
Hi ahoffman,

I am using ksh.
0
 
tfewsterCommented:
printf '\x61'

Though I don't understand how `printf "%x" a` produces the hex value of "a"  :-(
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
myrizviAuthor Commented:
$ printf '\x61'
x61

The above command is not producing desired result.

printf just converted the "a" to its hex value when used with "%x" option.

 
0
 
ahoffmannCommented:
please post version of OS, version of ksh, and result of
  which printf
0
 
tfewsterCommented:
As myrizvi has asked several questions about HP-UX, I assume it's HP-UX 11.x, which comes with ksh Version 11/16/88 and /usr/bin/printf ...

On HP-UX 11.x, `printf "%x" a`  does indeed return "61", though the man page states that it should be an integer argument. Go figure...
http://docs.hp.com/en/B2355-90680/printf.1.html

And the HP version of printf doesn't seem to allow you to specify a character to be specified in hex, only in octal - So something tortuous like this would be needed:
$ HEX=61
$ printf "\\"$(printf "%o\n" 0x$HEX)
(Use printf to convert $HEX to octal and then print the character corresponding to the octal number)
0
 
TintinCommented:
Now there's obviously some interesting differences in printf versions and whether it's using a builtin like ksh/bash or the printf binary.

On Solaris 9 at least the bash and ksh builtin versions of printf give the same results as /usr/bin/printf

tfewster, what OS/shell are you using that produces 'a' with

printf "%x" a

On Solaris 9, I get

printf: a expected numeric value

myrizvi.

I've tried

printf '\x61'

on Solaris under ksh/bash and the printf binary.  I've tried under FreeBSD and Redhat Linux, and the printf builtins work and on Redhat the /usr/bin/printf works, but on FreeBSD /usr/bin/printf produces

x61

Are you using FreeBSD or similar?

0
 
ahoffmannCommented:
>  Now there's obviously some interesting differences in ..
.. HP-UX
I guess it's worth looking in /usr/dt/bin where HP-UX stores the well known working standard executables ;-)
0
 
tfewsterCommented:
Curioser and curioser...It's not working for me on Solaris and printf doesn't appear to be built in to ksh on either HP-UX or Solaris...
(See my previous post for HP version details)

# uname -a
SunOS SUNMCC 5.9 Generic_112233-11 sun4u sparc SUNW,Sun-Blade-1000
# printf '\x61'
\x61
# which printf
/usr/bin/printf
export PATH=""
# printf '\x61'
ksh: printf:  not found
# echo $SHELL
/bin/ksh





0
 
TintinCommented:
I was wrong in my initial statement.  On Solaris only bash printf works as it is a shell builtin.  ksh doesn't have a printf builtin and the printf binary gives the undesired result.

# uname -sr
SunOS 5.9
# echo $0
bash
# type printf
printf is a shell builtin
# printf '\x61'
a# /usr/bin/printf '\x61'
\x61# exec ksh
# type printf
printf is /usr/bin/printf
0
 
myrizviAuthor Commented:
Thanks to all of you.

Right tfewster's solution is working for me, so I will accept this answer.

The unix is HP-UX 11.11 and ksh is /bin/ksh.

0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 3
  • 3
  • 3
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now