May 03, 2011

HEX形式を std::iterator で

バイナリイメージを扱う単純なフォーマットとして、HEX形式というものがあります。起源はとても古いのですが、現在でもマイコンの書き込み形式としてなとで使われています。最近、ROMへの書き込みといった少々複雑な機能をもつブートローダを作る必要があり、この形式の読み込みをサポートすることにしました。なお以前こちらのサイトでは『RubyによるHEXフォーマットの読み書き』という記事でHEX形式について取り上げましたが、今回はRubyではなくC++で実装することにします。

HEX形式は1行単位で意味が成立している形式です。ということで行指向でパース、もとい解釈を行い、それをC++の標準的な繰り返しであるiteratorとして解釈した結果を返却することにしました。行単位で逐次処理をすることで、省リソースを実現できます。またiteratorとして実装すると、他の標準的なライブラリと調和がとりやすくなるという利点がうまれます。

実装した結果はhexfile.hです。テストコード(hexfile_test.cpp)で機能確認を行いました。さらにcodepadを使って、これらのファイルを実行した結果も載せておこうと思います。

なおHEX形式としてはインテルHEXモトローラSレコードの2形式がありますが、その両方に対応してあります。

20:50 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdel.icio.usでブックマーク | トラックバック
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/799
コメント
コメントする









名前、アドレスを登録しますか?
(次回以降コメント入力が楽になります)
  • 匿名でのコメントは受け付けておりません。
  • 名前(ハンドル名可)とメールアドレスは必ず入力してください。
  • メールアドレスを表示されたくないときはURLも必ず記入してください。
  • コメント欄でHTMLタグは使用できません。
  • コメント本文に日本語(全角文字)がある程度多く含まれている必要があります。
  • コメント欄内のURLと思われる文字列は自動的にリンクに変換されます。