将二进制转换为小数和字符

时间:2014-01-31 17:55:52

标签: java

我想将二进制转换为小数和字符,如下所示:

11010 --> 1101 + 0(parity bit) -->decimals= 11 --> char ";"
10101 --> 1010 + 1             -->decimals= 5  --> char "5"
.
.

public class stringek {

    String bitek = "1101010101001000001000001";
    String[] bits;
    String four;
    char par;
    int parity;
    String digits;
    int n = 0;
    int b;
    int kurens;
    int decimalis;
    int digit;

    public stringek() {
        this.kurens = 0;
        bits = new String[200];
        for (int i = 0; i < 25; i += 5) {
            bits[n] = bitek.substring(i, i + 5);
            n++;
        }
        for (int i = 0; i < n; ++i) {
            int j = 0;
            four = bits[i].substring(j, j + 4);
            for (int p = 0; p < 4; ++p) {
                b = Integer.parseInt(four.substring(p));
                kurens += b;
            }
            par = bits[i].charAt(j+4);
            //System.out.print(par);
            parity = par-'0';
            decimalis = Integer.parseInt(four, 2);
            digit = decimalis + 48;
            if ((kurens + parity) % 2 == 0) {
                System.out.println("Binarys: "+four+"-"+par+" = "+"'"+(char)digit+"'"+" Decimalis:"+decimalis+"  Parity <INVALID>  ");
            }
            else{
                System.out.println("Binarys: "+four+"-"+par+" = "+"'"+(char)digit+"'"+" Decimalis:"+decimalis+"  Parity <VALID>  ");
            }
        }
    }

}

但我的计划结果如下:

Binarys: 1101-0 = '=' Decimalis:13  Parity <INVALID>  
Binarys: 1010-1 = ':' Decimalis:10  Parity <VALID>  
Binarys: 0010-0 = '2' Decimalis:2  Parity <INVALID>  
Binarys: 0001-0 = '1' Decimalis:1  Parity <INVALID>  
Binarys: 0000-1 = '0' Decimalis:0  Parity <VALID>

任何人都可以帮我解决?我必须说因为在我的情况下所有Parity都是有效的,但是我不知道为什么这里有一些Parity是无效的(我知道结果来自如果给我这个结果,但我想知道如何解决为VALID时当真的无效时有效且无效)。感谢

3 个答案:

答案 0 :(得分:1)

您不会使用String.split()StringTokenizer

  • 使用增量为5的for循环,检查字符串的长度
  • 使用String.substring()提取5个字符的字符串。

要计算所需目标数组的长度,您需要将字符串长度除以5.更好的方法是使用List<String>

答案 1 :(得分:1)

public String[] splitStringEvery(String s, int interval) {
    int arrayLength = (int) Math.ceil(((s.length() / (double)interval)));
    String[] result = new String[arrayLength];

    int j = 0;
    int lastIndex = result.length - 1;
    for (int i = 0; i < lastIndex; i++) {
        result[i] = s.substring(j, j + interval);
        j += interval;
    } //Add the last bit
    result[lastIndex] = s.substring(j);

    return result;
}

答案 2 :(得分:0)

使用Guava Libraries Splitter对象,特别是 完全 您想要做的fixedLength(...)方法。

Splitter splitter = Splitter.fixedLength(5);
Iterable<String> tokens= splitter.split(myVeryLongString);