从二进制字符串(或字节)中提取位序列

时间:2015-01-08 00:28:36

标签: java regex binary byte-shifting

我有一大堆十六进制字符串(56位或112位),在转换为二进制字符串后,我需要从中提取不同的部分。

我通常如何做到这一点是要对子部分进行子串,或者尝试使用位移,但是我没有使用~20行Integer.parseInt(binary.substring(...)),我想申请某种模式。

除了我的下面的任何想法,这是一种愚蠢和缓慢的想法;如何提取二进制字符串的a-b,c-d,x-y部分?我想有人需要应用位移,但这也需要多行。我很好用几行,但我真的不喜欢~20个子串调用。

这是我尝试这样的事情。

    String p = "(?<df>\\d{5})(?<ca>\\d{3})(?<aa>\\d{24})(?<pl>\\d{0,56})(?<pi>(\\d{24}))";
    String packet = "1000110101010000001011001010010110011001000100010110111100100000010010000000010010001000001010111001101101101010";
    Pattern pattern = Pattern.compile(p);
    Matcher matcher = pattern.matcher(packet);

    while (matcher.find())
        System.out.printf("df=%s, ca=%s, aa=%s, pl=%s, pi=%s\n", matcher.group("df"),
                matcher.group("ca"), matcher.group("aa"), matcher.group("pl"), matcher.group("pi"));

输出

df=10001, ca=101, aa=010100000010110010100101, pl=10011001000100010110111100100000010010000000010010001000, pi=001010111001101101101010
df=10001, ca=101, aa=010100000010110010100101, pl=10011001000100010110111100100000010010000000010010001000, pi=001010111001101101101010
df=10001, ca=101, aa=010100000010110010100101, pl=10011001000100010110111100100000010010000000010010001000, pi=001010111001101101101010

非常感谢任何想法

0 个答案:

没有答案