2

この問題に関するスタックオーバーフローに関する多くの投稿を見てきましたが、部分的な解決策を見つけましたが、これまでのところ、自分に合った解決策をまだ見つけていません。 new BigDecimal("3324679375210329505").toString(2); 私にとっては最もうまくいくようです( from: Convert a large 2^63 decimal to binary)が、先頭と末尾のゼロが必要です。とにかく、大きな(長いものよりも大きい)16進数をバイナリ(文字列)表現に変換できるものはありますか?

前もって感謝します。

4

2 に答える 2

3

BigInteger クラスは、任意の大きな数を処理します。

末尾のゼロはすでに処理されています。先頭のゼロを処理するには、先頭に「1」を追加するだけで先頭の「1」ビットが確保され、再び削除されます。

String bits = new BigInteger("1" + hex, 16).toStting(2).substring(1);
于 2013-04-20T20:50:04.783 に答える
2

先行ゼロが必要ですか? 組み込み関数については知りませんが、自分で簡単に実装できます。

public static String hex2binary(String hex) {
    StringBuilder result = new StringBuilder(hex.length() * 4);
    for (char c : hex.toUpperCase().toCharArray()) {
        switch (c) {
        case '0': result.append("0000"); break;
        case '1': result.append("0001"); break;
        case '2': result.append("0010"); break;
        case '3': result.append("0011"); break;
        case '4': result.append("0100"); break;
        case '5': result.append("0101"); break;
        case '6': result.append("0110"); break;
        case '7': result.append("0111"); break;
        case '8': result.append("1000"); break;
        case '9': result.append("1001"); break;
        case 'A': result.append("1010"); break;
        case 'B': result.append("1011"); break;
        case 'C': result.append("1100"); break;
        case 'D': result.append("1101"); break;
        case 'E': result.append("1110"); break;
        case 'F': result.append("1111"); break;
        default: throw new IllegalArgumentException("Invalid hex: '" + hex + "'");
        }
    }
    return result.toString();
}
于 2013-04-20T21:01:12.917 に答える