字符串到二进制?

时间:2015-08-28 19:23:52

标签: java string binary

我的情况很奇怪,

我正在为另一个程序编写一个过滤引擎,该程序具有所谓的"保存区域"。每个保存区域编号为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

这将完全奏效。

或者,有更聪明的方法吗?

3 个答案:

答案 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桶。