int fromHexChar(char c)
{
char upper = c & 0x40;
char lower = c & 0x0F;
retrn (upper >> 3) | (lower + (upper >> 6));
}
// 0x30: '0' 0b 0011 0000 --> 0000 0000 // : // 0x39: '9' 0b 0011 0101 --> 0000 1001
0-9 は, 上位 bit をなくせばよい。
// 0x41: 'A' 0b 0100 0001 --> 0000 1010 // 0x61: 'a' 0b 0101 0001 --> 0000 1010
A-F, a-f の下位 bit は同じ。 上位 bit を見ると、 0#00 の # 部分が 1で、0-9はこのビットが 0 → このビットをうまいこと使って調整している。