我正在尝试找到一些现在很容易破解二进制字符串的代码。我甚至不确定我是否正确地问这个问题,但我想得到每个“有效位”的值。例如,如果我有一个100000001的二进制字符串,我想在数组中返回值256,1。我试图解决这个问题,所以我可以在SQL中使用一个包含整数列和文本列的查找表。整数列将用于确定将哪些文本值写入新表。因此,1处的“Text1”值和256处的“Text 2”都将写入新表,但提交这些值的数字将为257.
我知道我在漫无边际,但我会输入一个值257,并将其转换为100000001的二进制字符串。现在我想要一些代码将该二进制字符串分解为两个值... 1和256.我在制作任何意义?
答案 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;
}
这将产生一个数组,其中所有值都是降序2的幂,其中所有元素的总和将是原始数字。例如,257
将生成[256, 1]
,127
将生成[64, 32, 16, 8, 4, 2, 1]
。