とあるJpegの送信を行ったTCP通信時のバイナリデータがあります。
そこから不要な情報を削除してJpegデータを復元したいと思っています。
条件は以下の通りです。
[前提条件]
以下のヘッダにJpegを分割してくっ付けて送っています。
identifier[4 byte] = "DCAA"
result[2 byte]
command_id[2 byte] = 0001H~02FFH
length[4 byte] = dataサイズ
data[n byte] = Jpegデータ
ここから分割したJpegデータを抜き出し復元したい(パケットのロスや重複は考えないものとします)
[手順]
- バイナリデータを先頭から見ていき"DCAA"が出るまで読み飛ばす
- "DCAA"が出てきたらcommand_idを見て0202Hであるか確認する(それ以外のコマンドが持っているdataはJpegではない)
- 0202Hであれば identifier~length を削除する
- 0202H以外であれば identifier~data を削除する
以下ファイルの終端まで繰り返し
これをperlで実現しようと思っています。
perl
1MAIN:{ 2 my $buf, $size; 3 4 #ファイルオープン 5 open ( IN, "< $_$ARGV[0]" ) or die "$!"; # in 6 open ( OUT, "> $ARGV[1]]" ) or die "$!"; # out 7 8 binmode IN; 9 binmode OUT; 10 11 $size = -s $_$ARGV[0]; 12 13 read(IN, $buf, $size); 14 15 my $identifier = "DCAA"; 16 17 # 16進バイナリ から 文字列 への変換 18 my @ascii = unpack('H*', $buf); 19 for my $i (0..$#ascii){ 20 if ( $#ascii eq $identifier ){ 21 # .... 22 } 23 }
ここまでやりました。
教えていただきたい事は
- バイナリデータとアスキーデータの比較
- バイナリデータの削除(これはバイナリ出力時に読み飛ばせばいいかな)
- バイナリデータのシーク
の3つを教えてください。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/31 10:57
2016/04/01 16:42