0

ここに初投稿。他の変換を含め、16 進数から 10 進数に変換する割り当てがありますが、これには困惑しています...

したがって、変換する必要がある 16 進値は 12345678、2A3DF8A7、00FF00FF です。00FF00FF は正常に動作します。問題を引き起こしているのは数値です。

数字に 16^n を掛けなければならないことはわかっていますが、正しいと思っていても、何らかの理由で値が高すぎます。機能していないため、明らかにそうではありません。助けていただければ幸いです。

私のコードは過去 1 時間にわたって変更されましたが、問題は最後の「else」です。

public void toDec()
{
    dec = 0;
    for (int j = 0, i = 7; j < hex.length(); j++){

        if (hex.charAt(j) == 'A') {
            dec += (10 * (int)Math.pow(16, i));
        }
        else if (hex.charAt(j) == 'B') {
            dec += (11 * (int)Math.pow(16, i));
        }
        else if (hex.charAt(j) == 'C') {
            dec += (12 * (int)Math.pow(16, i));
        }
        else if (hex.charAt(j) == 'D') {
            dec += (13 * (int)Math.pow(16, i));
        }
        else if (hex.charAt(j) == 'E') {
            dec += (14 * (int)Math.pow(16, i));
        }
        else if (hex.charAt(j) == 'F') {
            dec += (15 * (int)Math.pow(16, i));
        }
        else if (hex.charAt(j) == '0') {
            dec = dec;
        }
        else {
            dec += ((int)hex.charAt(j)) * ((int)Math.pow(16, i));
        }
        i--;
    }
}
4

2 に答える 2

0

問題はelse句にあり、1 から 9 までの数字を処理します。

問題は、数字と数字を表す文字を混同していることです。たとえば、数字の 1 は文字 で表され、文字コードは 49 です。したがって、 else 句 (つまり) で文字を'1'キャストすると、返されるのは文字コード 49 であり、1 ではありません。'1'int(int)hex.charAt(j)

これを修正する簡単な (そして慣用的な) 方法は、キャラクターに整数演算を使用することです。たとえば、hex.charAt(j) - '0'の代わりに を使用し(int)hex.charAt(j)ます。これが機能するのは、 ~ の文字には連続する文字コード 48 '0''9'57 が割り当てられているためです。したがって、(たとえば) の文字コード(49 '0') から (48)の文字コードを引く'1'と、実際の数字の値が返されます49 - 48 = 1。他の数字についても同じことが言えます:'5' - '0'53 - 48(もちろん) 5 に等しい と等価です。

さらに良いことに、同じアプローチが他の 16 進文字にも機能します。たとえば、 を実行する'C' - 'A' + 10と、結果12(文字 C の 16 進値) が得られます。

于 2013-09-13T01:01:52.030 に答える
0

ここで char を int にキャストすることが問題です。特定の数字を表す int 値の代わりに、char コードを取得します。試してみてください:System.out.println((int) '5');

それを解決する最も簡単な方法は(hex.charAt(j) - '0').

于 2013-09-13T01:02:01.083 に答える