Befunge-93, 58
&:88+%"0"+:"9"`7*+\8/2/:!#|_#
,_@ >:#
First time doing a real golfing challenge in Befunge, I bet there's a one-liner for this that's shorter since all those spaces in the middle of the second line seem wasteful.
You can step through it here. Partial explanation:
&: Take input.
:88+%: Take the remainder modulo 16.
"0"+: Add it to the ASCII value of 0.
:"9"`: If the result is greater than the ASCII value of 9...
7*+: Add 7 to convert it to a letter.
\: Save the resulting character on the stack.
8/2/: Divide by 16 rounding down.
:!#|_: Exit the loop if the result is 0.
#: Otherwise go back to the modulus step.
>:#,_@ (wrapping around): Once finished, output the stack in LIFO order.