0

8 進数を 2 進数に変換してから 16 進数に変換するプログラムをコーディングしようとしましたが、問題は間違った答えを得ることです。実際に変換するコードは次のとおりです。

    user_input=user_input.replace("0", "00");
    user_input=user_input.replace("1", "01");
    user_input=user_input.replace("2", "10");
    user_input=user_input.replace("3", "11");
    user_input=user_input.replace("4", "100");
    user_input=user_input.replace("5", "101");
    user_input=user_input.replace("6", "110");
    user_input=user_input.replace("7", "111");

    if (!(user_input.length()-1 % 4 ==0)){
        user_input = "00" + user_input; }


    user_input=user_input.replace("0000", "0");
    user_input=user_input.replace("0001", "1");
    user_input=user_input.replace("0010", "2");
    user_input=user_input.replace("0011", "3");
    user_input=user_input.replace("0100", "4");
    user_input=user_input.replace("0101", "5");
    user_input=user_input.replace("0110", "6");
    user_input=user_input.replace("0111", "7");
    user_input=user_input.replace("1000", "8");
    user_input=user_input.replace("1001", "9");
    user_input=user_input.replace("1010", "A");
    user_input=user_input.replace("1011", "B");
    user_input=user_input.replace("1100", "C");
    user_input=user_input.replace("1101", "D");
    user_input=user_input.replace("1110", "E");
    user_input=user_input.replace("1111", "F");

私のキーは 1057 という数字を使用しており、これは 22F に変換されるはずですが、12F の出力が得られます

私が間違っていることについて何か考えはありますか?

4

2 に答える 2

0

代わりにこれを検討するかもしれません

int user_input_dec = Integer.parseInt(user_input,8);
String hex = Integer.toHexString(user_input_dec);
于 2013-10-14T16:58:44.703 に答える
0

2 つの問題があります。

  1. 0-3 を 8 進数から 2 進数に変換する場合、先頭の 0 が必要です。現在、コードは 8 進数10をバイナリに変更して0100いますが、これは正しくありません (8 を 4 に変えました)。
  2. 2 進数から 16 進数に解析する場合、単に置換を行うと、解析の結果0000または0001後続の呼び出しで解析される可能性があります。たとえば、 がある場合、00000010最初に に変更され00010、次に10に解析されるはずだったときに停止し2ます。

これらにパッチを当てることは可能ですが、@asantaballa は正しく、Integer.toHexString(Integer.parseInt(user_input, 8))コードに実行させようとしていたことと同じことを行います。

于 2013-10-14T17:05:08.850 に答える