Use unsigned types for gethex()/Puthex()

This is rather cosmetic for gethexnib() and gethex(), but it does change
behaviour for puthex(), because the signed bit shift produces wrong
results if the high bit is set.

For example, 0xf0 resulted in ah == 0xff, which is interpreted as -1,
so it translates to -1 + '0', or '/' (instead of 'f').