大十六进制到二进制

时间:2013-04-20 20:46:33

标签: java

我在stackoverflow上看了很多关于这个问题的帖子,我找到了部分解决方案,但到目前为止我还没有找到适合我的解决方案。 new BigDecimal("3324679375210329505").toString(2); 似乎最适合我(来自:Convert a large 2^63 decimal to binary),但我确实需要前导和尾随零。无论如何,我可以将一个大的(大于一个长的)十六进制转换为二进制(String)表示吗?

提前致谢。

2 个答案:

答案 0 :(得分:3)

BigInteger类处理任意大数。

已经处理了尾随零。要处理前导零,只需在前面添加一个“1”,这样可以确保前导“1”位,然后再将其剥离:

String bits = new BigInteger("1" + hex, 16).toStting(2).substring(1);

答案 1 :(得分: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();
}