我的情况很奇怪,
我正在为另一个程序编写一个过滤引擎,该程序具有所谓的"保存区域"。每个保存区域编号为0到32(为什么有33个,我不知道)。它们通过二进制字符串打开或关闭,
1 = save area 0 on
10 = save area 1 on, save area 0 off
100 = save area 2 on, save areas 1 and 0 off.
等等。
我有另一个程序传递它需要的保存区域,但它使用十进制表示和下划线 - 例如1_2_3用于保存区域1,2和3。
我需要将该示例转换为1110。
我想到的是我可以按如下方式构建字符串: 我将它(使用拆分)分解为savePart [i]。然后我遍历savePart [i]并构建字符串:
String saveString = padRight("0b1",Integer.parseInt(savePart[i]));
那将给我一个字符串,内容为" 0b1000000"例如,在保存区域6的情况下。
有没有办法读取该字符串,就好像它是二进制数字一样。因为如果我要说:
long saveBinary = 0b1000000L
这将完全奏效。
或者,有更聪明的方法吗?
答案 0 :(得分:3)
long saveBinary = Long.parseLong(saveString, 2);
请注意,您必须不使用0b
前缀。
答案 1 :(得分:1)
这样做:
String input = "1_2_3";
long areaBits = 0;
for (String numTxt : input.split("_")) {
areaBits |= 1L << Integer.parseInt(numTxt);
}
System.out.printf("\"%s\" -> %d (decimal) = %<x (hex) = %s (binary)%n",
input, areaBits, Long.toBinaryString(areaBits));
输出:
"1_2_3" -> 14 (decimal) = e (hex) = 1110 (binary)
答案 2 :(得分:0)
只需取字符串中的每个数字并将其视为指数。累计找到的每个指数的总数,您将得到您的答案,无需删除前缀或后缀。
// will contain our answer
long answer = 0;
String[] buckets = givenData.split("_"); // array of each bucket wanted, exponents
for (int x = 0; x < buckets.length; x++){ // iterate through all exponents found
long tmpLong = Long.parseLong(buckets[x]); // get the exponent
answer = (10^tmpLong) + answer; // add 10^exponent to our running total
}
答案现在将以格式1011010101(你有什么)包含我们的答案。
在您的示例中,给定数据为1_2_3。该数组将包含{“1”,“2”,“3”}
我们遍历那个数组...
10 ^ 1 + 10 ^ 2 + 10 ^ 3 = 10 + 100 + 1000 = 1110
我相信这也是你的数字为0 - 32. x ^ 0 = 1的原因,因此当 0 在输入中时你可以转储到0桶。