コンソールより入力された2Byteの16進文字列(00〜FFまでの範囲:0-9/a-f/A-F)を
バイナリに変換するプログラムを作ろうと思い、
いろいろ探していたら、過去に他人が作ったプログラムが見つかりました。
しかしながら中身がいまいち理解できません。

1文字目は(対象文字 - 0x37) << 4

2文字目は上記よりシフトを抜いて処理。となっていました。
シフトしてるのはわかるんですが、なんで0x37でひくと
うまく処理できるのかわかりません。

入力できるのは00−FFまでの255パターンと限定してるので
0x37でひくのに意味があるのかなと思っているのですが、、
どなたかご教示ください<m(__)m>

ほかにこんな方法を使うともっといいというのがあったら重ねてお願いいたします。