Java二进制翻译?

时间:2016-11-08 18:15:43

标签: java

我正在尝试找到一些现在很容易破解二进制字符串的代码。我甚至不确定我是否正确地问这个问题,但我想得到每个“有效位”的值。例如,如果我有一个100000001的二进制字符串,我想在数组中返回值256,1。我试图解决这个问题,所以我可以在SQL中使用一个包含整数列和文本列的查找表。整数列将用于确定将哪些文本值写入新表。因此,1处的“Text1”值和256处的“Text 2”都将写入新表,但提交这些值的数字将为257.
我知道我在漫无边际,但我会输入一个值257,并将其转换为100000001的二进制字符串。现在我想要一些代码将该二进制字符串分解为两个值... 1和256.我在制作任何意义?

1 个答案:

答案 0 :(得分:0)

如果使用Integer.highestOneBit,则无需转换为二进制字符串。您可以遍历一位,每次调用Integer.highestOneBit时填入一个大小为Integer.bitCount的数组。之后,您可以使用最高位的值进行xor将其从数字中删除。

public static int[] getOneBits(int num) {
    int[] oneBits = new int[Integer.bitCount(num)];
    for (int i = 0; i < oneBits.length; i++) {
        oneBits[i] = Integer.highestOneBit(num);
        num ^= oneBits[i];
    }
    return oneBits;
}

Ideone Demo

这将产生一个数组,其中所有值都是降序2的幂,其中所有元素的总和将是原始数字。例如,257将生成[256, 1]127将生成[64, 32, 16, 8, 4, 2, 1]