ネットワーク経由で受信した 16 バイトの raw パケットを、スペースで区切られた 16 進形式で吐き出す Java プログラムがあります。そのコードを変更したくないので、結果を Perl スクリプトにパイプします。理論的には、unpack
これを単純STDIN
に認識可能な変数に変換できます。以下は、私の Perl ファイルへの行入力のサンプルです。
FF FF 09 7D 10 01 07 01 00 02 00 1D 00 00 00 00 00 06 00 07 00 |--ガベージ-----|c--|c--|int---|int---|int---|int---|int---|int---|int- --|
(cはchar/byte、intは16bit整数変数)
unpack
私は当初、各入力行を必要な変数にきれいに分離するために使用したいと考えていました。ただし、文字列にスペース区切りがあるため、それを処理する方法がわかりません (「A」をテンプレートとして使用できますが、分割を使用することもできます!)
エレガントな使い方はありunpack()
ますか?私は Perl の達人ではありませんが、前に提案したように、split
各 16 進数を手動でバイトに変換し、ビット操作とマスクを使用して必要なものを取得する方法もあります。他に何か提案unpack
はありますか?