0

バイナリ文字列に変換した後、さまざまな部分を抽出する必要がある 16 進文字列 (56 ビットまたは 112 ビット) がたくさんあります。

私が通常行う方法は、パーツをサブストリング化するか、ビットシフトで運試しをすることですが、Integer.parseInt(binary.substring(...)) の約 20 行を使用する代わりに、何らかの種類を適用したいと思います。それにパターン。

以下の私のもの以外のアイデアは、ちょっとばかげていて遅いです。バイナリ文字列の ab、cd、xy 部分を抽出する方法は? ビットシフトを適用する必要があると思いますが、それには複数の行が必要です。私は数行で問題ありませんが、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

どんなアイデアでも大歓迎です

4

0 に答える 0