Rubyでバイナリファイルを紐解く

バイナリファイルを読むのにreadをぱかすか呼ぶのもアレなので、
gem経由でインストールできるライブラリを適当に眺めてみた。

  • binaryparser 0.3.3

BinaryBlocker::Blockerを継承したクラス定義にて構造体を定義する。
エンディアンについては考慮されていないっぽい気が。
has_xxxなど多種パターンに対応。

  • bindata 0.6.0

BinData::Structを継承したクラス定義で構造を定義する。
エンディアンについて標準で対応。
構造体の範囲で相互依存している場合、lambdaを使えば解決できる。
別のクラスに依存する場合は多分ごりごりやらないと駄目。

  • calibre-binaryreader 1.0

構造体を定義というよりかはバイナリ読み込み向けのメソッドを提供している。
エンディアンは対応あり。

  • BitStructEx 0.0.91

bitstructに比べてネストした構造へも対応している。
エンディアン対応。
データを読むのがnewした段階っぽい


用途がseek頻発だったり、エンディアンに注意しないといけないので、
機能をとるならbinaryparserだけど、とりあえずはBinDataが一番使いやすい気がする。