2

これは16進数を文字列に変換するためのコードですが、文字列のサイズが62文字を超えなくなるまで正常に機能しますか?

public static String hexToString(String hex)
        {       
           StringBuilder output = new StringBuilder();
           for (int i = 0; i < hex.length(); i+=2)
           {
            String str = hex.substring(i, i+2);
            output.append((char)Integer.parseInt(str, 16));
           }
           return(output.toString());
        }

java.lang.StringIndexOutOfBoundsException:文字列インデックスが範囲外です:62 at java.lang.String.substring(Unknown Source)at HEX.hexToString(HEX.java:36)at HEX.main(HEX.java:56)

4

4 に答える 4

3

i+2String str = hex.substring(i, i+2);問題です。i < hex.length()が、奇数の場合i+2は大きすぎhex.length()ます。

于 2012-09-07T12:04:19.487 に答える
2

この問題が発生するのは、文字列に奇数の文字が含まれている場合のみです。次のように関数を修正します。

public static String hexToString(String hex)
    {       
       StringBuilder output = new StringBuilder();
       String str = "";
       for (int i = 0; i < hex.length(); i+=2)
       {

        if(i+2 < hex.length()){
            str = hex.substring(i, i+2);
        }else{
            str = hex.substring(i, i+1);
        }
        output.append((char)Integer.parseInt(str, 16));
       }
       return(output.toString());
    }
于 2012-09-07T12:28:11.513 に答える
0

ループ状態を修正します:

for (int i = 0; i < hex.length() - 3; i +=2) 
于 2012-09-07T12:09:34.533 に答える
0

forループでString.lengthを使用していて、iが0で開始されている場合は、文字列の長さから-1にする必要があります。

for (int i = 0; i < hex.length()-1; i+=2) 
于 2012-09-07T12:06:29.797 に答える