字符串转二进制?

String to binary?

我的情况很奇怪,

我正在为另一个程序编写一个过滤器引擎,那个程序有所谓的 "save areas"。每个保存区域都编号为 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] 并构建 strings:

String saveString = padRight("0b1",Integer.parseInt(savePart[i]));

例如,在保存区域 6 的情况下,这将给我一个字符串,该字符串显示为“0b1000000”。

有没有办法读取该字符串,就好像它是一个二进制数一样。因为如果我说:

long saveBinary = 0b1000000L

完全可以。

或者,有没有更聪明的方法来做到这一点?

long saveBinary = Long.parseLong(saveString, 2);

请注意,您必须去掉 0b 前缀。

这样做就可以了:

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)

只需取字符串中的每个数字并将其视为指数。累加找到的每个指数的总数,您将得到答案 w/o 需要删除前缀或后缀。

    // 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
    }

answer 现在将以 1011010101(你有什么)的格式包含我们的答案。

在您的示例中,给定的数据是 1_2_3。该数组将包含 {"1", "2", "3"}

我们遍历该数组...

10^1 + 10^2 + 10^3 = 10 + 100 + 1000 = 1110

我相信这也是您的数字为 0 - 32 的原因。x^0 = 1,因此当输入中有 0 时,您可以转储到 0 桶中。