次のコードを使用して、16 進数を同等の 2 進数形式に変換するプログラムを作成しましたが、間違った結果が得られました。コードは次のとおりです。
public String convert(String num){
String res="";
int []hex={0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111};
int i;
char ch;
for(i=0;i<num.length();i++)
{
ch=num.charAt(i);
if(ch>='a' && ch<='f'){
res+=hex[ch-97+10]+"";
}
else if(ch>='A' && ch<='F'){
res+=hex[ch-65+10]+"";
}
else if(ch>='0' && ch<='9'){
int d=ch-48;
res+=hex[d]+"";
}
}
return res;
}
サンプル入力を「12ae」として指定すると、対応する出力が「1810101110」として取得されます。入力フィールドに数字があり、すべての文字に対してのみ正常に機能する場合にのみ発生します(失敗します)。しかし、hex という名前の配列を String 型の配列に変更すると、正確な答えが得られます。
コンパイラが整数配列内の数値を何らかの形式の 8 進数として扱うためでしょうか、それとも他の理由でしょうか?