int main(){
char a[10] = "0x96";
char b = 0x00;

b = ((char)(a[2] - '0') << 4) ;
printf("b=%x\n",b );
b = b | (a[3] - '0');
printf("b=%x\n",b );
}

・実行結果
b=0xffffff96

文字列”0x96”から16進数の0x96に変換したいんですけど、なんかないでしょうか?
aの値は0x00〜0xffを予定しています。
いまの 「- '0'」の処理がだめなのはわかってますが、なんで実行結果に「ffffff」入るのかさっぱりわからないです。