5

int 値をバイナリ文字列に変換して格納するメソッドを作成しています。そのために Integer.toBinaryString メソッドを使用していますが、正しく動作していますが、問題は、メソッドが文字列内で正確に 4 ビットを返す必要があることです (数値が十分に大きくないため、それ以上になることはありません)。 )。ここに私のコードの例と問題が発生している場所があります:

int value5 = 3;
String strValue5 = Integer.toBinaryString(value5);
for(int index = 0; index < 4; index++){
     sBoxPostPass[4][index] = strVal5.charAt(index);
}

strValue5 == 11明らかに、これは ArrayOutOfBoundsException をスロー0011します。これが十分に明確であることを願っています。助けてくれてありがとう。

4

3 に答える 3

2

これが最も効率的なメソッドであるとは限りませんが、Integer.toBinaryString を呼び出して適切にフォーマットする独自のメソッドをいつでも作成できます。

public static String toBinaryStringOfLength(int value, int length) {
    String binaryString = Integer.toBinaryString(value); 
    StringBuilder leadingZeroes = new StringBuilder();
    for(int index = 0; index < length - binaryString.length(); index++) {
        leadingZeroes = leadingZeroes.append("0");
    }

    return leadingZeroes + binaryString;
}

送信する値をバイナリで表すには、指定した長さよりも多くのビットが必要になるという状況を考慮していないことに注意してください。

于 2012-08-03T23:44:57.837 に答える
1

値が常に正確に 4 ビットである場合、問題の 16 個の値に対してルックアップ テーブルを使用するのに十分な小ささです。Java のエラーを修正することは、読者の演習として残されています。

static String binary4[16] = {"0000", /* another exercise for the reader */, "1111"};
static String toBinary4(int value) {
    return binary4[value & 0xF];
}
于 2012-08-03T23:38:52.867 に答える