Since you need the program to be fast you'll have to sacrifice size. Here's one method that's pretty fast (50 Hex->Bin and Bin->Hex conversions of an 8 hex-digit = 16 binary-digit number, so 100 conversions total, in about 30 seconds), but it's kinda big.
Store these strings at the beginning of your program so you don't have to create them for every conversion:
:"0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111→Str0
:"0123456789ABCDEF→Str9
For Hex->Bin (input string is Str1 and output string is Str2):
:" //a space
:For(A,1,length(Str1
:Ans+sub(Str0,5inString(Str9,sub(Str1,A,1))-4,4
:End
:sub(Ans,2,length(Ans)-1→Str2
And for Bin->Hex (same input/output). The one problem with this is that the length of the input string has to be a multiple of four (so "11" won't work but "0011" will work):
:" //a space
:For(A,1,.25length(Str1
:Ans+sub(Str9,.2inString(Str0,sub(Str1,4A-3,4))+.8,1
:End
:sub(Ans,2,length(Ans)-1→Str2
The "sub(Ans,2,length(Ans)-1→Str1" part could be omitted if you adjusted the rest of your program to ignore the last character, but depending on how frequently called this routine is it might actually slow the program down.
[edit] Dang, builderboy beat me to it.