• ベストアンサー

バイナリファイルをバイト単位でアクセスするには?

 大サイズのバイナリファイルに対して、perlでチェックサムを調べたりCRCチェックをかけるプログラムを作成したいと考えています。従って、そのバイナリファイルからバイト単位でデータを取り出して、計算するということをしなければならないのですが、いちばん基本的なところの、『バイナリファイルからバイト単位で順番にデータを取り出す方法』がわかりません。  よろしくお願いします。

  • Perl
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.1

File::Binary というモジュールがあるので、それを使ってみてはどうでしょうか? CPAN.org http://search.cpan.org/~simonw/File-Binary-1.1/Binary.pm ドキュメント日本語訳 http://perldoc.jp/docs/modules/File-Binary-1.1/Binary.pod モジュールが使えない環境だったりする場合は、 1.一定サイズを読み込む。 2.必要なバイト数を substr で切り出す。 3.データが足りなくなったら、また読み込む。 なんて感じでできます。 ※read でチョコチョコ読んでもできますが、あまり勧めません。

参考URL:
http://search.cpan.org/~simonw/File-Binary-1.1/Binary.pm,http://perldoc.jp/docs/modules/File-Binary-1.1/Binary.pod
old_music_fan
質問者

お礼

 ありがとうございました。 なんとか、実現することができました。 お礼がおそくなり、誠に申し訳ございませんでした。

関連するQ&A

  • バイナリファイルの編集

    サイズの大きいバイナリファイルがあります。 1レコードのサイズは200バイトです。 これの6バイト目から17バイト目を抜いたファイルを 作成するプログラムを考えています。 バイナリファイルの読みんだデータは 何型に格納すればいいのかわかりません。 よろしくお願いします。

  • 「チェックサム」とは何?

    今まで、いろいろ使ってきた外付けハードディスクを、一端からっぽにして きれいにしようと思い、こちらで質問したところ初期化のやり方を教えていただきました。 それでその操作に関して再度質問なのですが、Finderからサービス→ディスクユーティリティ へ行くと、    イメージチェックサム(CRC-32)を計算    イメージチェックサム(MD-5)を計算 と出てきてどちらかを選ぶようになっています。 チェックサムについては調べたら 「バイナリーファイルチェックのことで、32桁の「チェックサム」を作成するものです。これは、DDPイメージファイルの受取者が再作成または比較して、データが破損していないことを確認できる数値」(これはMD5についての記述) とありました。わかるようなわからないような…漠然と理解した感じです。 では、CRC-32とMD-5は、どちらを選べばいいのでしょうか? 詳しい方、教えていただけますでしょうか。 よろしくお願い致します。

    • ベストアンサー
    • Mac
  • Perlでバイナリファイルを作成するには?

     Perlでバイナリファイルを扱うことを考えていますが、そもそも、Perlでバイナリファイルを作成することができるのでしょうか? バイナリファイルを読み込んで解析するところまでは習得しています。よろしくお願いします。

    • ベストアンサー
    • Perl
  • PHPでのビット演算、バイナリファイル操作

    PHPで、SWFファイルのビット単位での書き換えと、 情報の抽出を行っています。 しかし、ファイルからビット単位で読み込むことができないため(バイト単位になる)、なかなか苦労しています。 漠然とした質問になってしまいますが、PHPを使ってビット単位のデータを扱っている方、いらっしゃいますか? その他Perlのほうが向いているとか、バイナリファイルの加工をサーバサイドで扱っている方いらっしゃいましたら、どんなふうにやっているか教えていただきたいです。

    • 締切済み
    • PHP
  • テキストファイルのデータからバイナリを作りたい

    現在、テキストデータとしてCSVファイル1つあたり8バイトのデータが1000個ほどのデータが書かれているファイルがあります。このデータをバイナリファイルへ数値も変換して行きたいと思っています。 たとえば1個目のデータ”12345678”というテキストデータをバイナリの"12345678"に変換したらそれを0x00番地に並べて、そして2個目のデータ”87654321”というデータをバイナリにしたらそれを0x90離れた場所に置いていき、それを1000回繰り返して、結果をバイナリファイルで出力したいのですが、何か簡単にできるフリーソフトなどありませんでしょうか? また、プログラムとかでも簡単にできるのならそうしたいのですが、どうしたらよいか教えていただけないでしょうか?

  • バイナリファイルの書き出し

    バイナリファイルにデータを書き込むプログラムを作りたいと思っています。実は、Standard MIDI Fileのバイナリファイルを作りたいんです。 SMFについては、今まで、直接バイナリエディタで開き、16進数の数字をいじくって、データ書き換えたりしてたので直接バイナリファイルに16進数での数字を書きたいんです。 たとえば、テキストファイルに903C408360803C0000みたいに吐き出すプログラムでは、バイナリファイルに書き出してからバイナリエディタで開くと こいつがさらに16進数に変換されてしまいますよね? そうならないようにするにはどうやればいいんですか?

  • C# ファイル→バイナリ→ファイルの変換

    いつもお世話になっています。 只今、エクセルやワードなどのファイルをバイナリデータに変換し DBへ格納するプログラムを作成しています。 使用しているDBはSQLServerです バイナリデータに変換して格納することは出来ました ですが、そこから元のファイルに戻す方法が分かりません やりたいことは  1:バイナリデータを復元  2:ダウンロードする  3:ダウンロードすることなく開く の3つです 調べ方が悪いのか、全く見つからず困っています。 WebではなくWindowsフォームがベースのプログラムです サンプルや手順などがわかる方、よろしくお願いします。

  • バイナリファイルの計算方法

    バイナリデータをはじめて扱う初心者です。 バイナリデータファイルからデータを読み出したいと思います。 環境はWindowsXPとLabView7.1です。 バイナリエディタで見てみると、  E8 03 と格納されている、2バイトshort型のデータがあります。 LabView7.1を使って、E8 03 という配列要素を読み出すことまではできました。 次に、この値を10進数で表現すると、いくつになれば正解なのでしょうか? (E8 03 という値をどのように計算して10進数にすればいいのでしょうか?) 私なりにプログラムした結果、-24か232のどちらかだと思うのですが自信がありません。 (データ自体が計測器が吐き出したデータなので、どのような値が入っているかわからないのです。 LabViewがビックエンディアンを使っていることも、正解に自信が持てない一因です) バイナリエディタで10進数に変換してくれるようなツールがあれば一番いいのですが。 ご存知の方がいらっしゃいましたら、ご教授ください。

  • バイナリファイルとバイナリ文字列の違い

    がわかりません。 例えば >http://e-words.jp/w/E38390E382A4E3838AE383AAE58897.html をみるとバイナリ列は1バイトを連ねたものだというらしいです。 つまり【文】という文字列を文字コードUTF-8でバイト配列化すると [1] => 230 [2] => 150 [3] => 135 となります。 (これはPHPでunpackかけましたが他の言語のGetBytes()などでも同じバイト値がでました。) この【文】という文字列はバイナリ列になるわけですよね? 例えばこの【文】という文字だけを保存したbun.txtというファイルはバイナリーファイルに なるのでしょうか? バイナリファイルの定義をみると >http://e-words.jp/w/E38390E382A4E3838AE383AAE38395E382A1E382A4E383AB.html 上記URLだと >文字コードの範囲などを考慮せずに作成されたファイル というのがバイナリファイルであるとあります。 つまりバイナリファイルとは 1バイト・・つまり8ビット(0~255)までの数値で表したものを連ねたもので なおかつ、文字コードなどの解釈を一切行わなずに、バイト値のみが記述されたデータと おもってもよいのでしょうか?

  • C++のバイナリファイル読み込み

    C++を勉強しています。 例えばバイナリファイルがあって、例えば5バイトおきに10バイトずつ読み込むという場合についてどうすればいいか考えています。(5~15,20~30,35~45のような) 調べてみるとseekgなどが使える??と思ったんですが,プログラミング得意じゃないんでいまいち分かりませんでした。 質問内容からしてプログラムを何も分かってないと思われるかと思いますが,ご教授お願いします

専門家に質問してみよう