2011年5月14日土曜日

構造体データのバイナリファイル出力、読み取り

構造体データをバイナリファイルとして出力し、バイナリファイルから構造体データを読み取る例題です。

固定サイズの構造体の場合
読み取りの際には、構造体データのサイズ毎に読み取り、データが無くなるまで処理を行っています。
実行結果
サイズが変動する構造体の場合

上記の例題では、読み書きのサイズには sizeof(entry) にてサイズを指定していますが、文字列の長さが可変の場合には注意が必要で、文字列の長さに応じて構造体のサイズを毎回計算する必要があります。

以下の例題では、構造体のサイズが毎回異なる場合のファイル出力、読み込み、表示を行なっています。

ファイルフォーマット:
[格納する名前の数][リストのタイトル][格納数に応じた名前の長さ、文字列の繰り返し]
[格納する名前の数][リストのタイトル][格納数に応じた名前の長さ、文字列の繰り返し]
[格納する名前の数][リストのタイトル][格納数に応じた名前の長さ、文字列の繰り返し]
→ 格納する名前の数が読み取れなくなるまで構造体を読み取る
実行結果
既存のフォーマットファイルの場合(.bmp/.wav ファイル)

RFC 等により既定されている既存のファイルフォーマットは、構造体の形式を予め調べておくことにより入出力することができます(画像:ビットマップ形式PNM形式、音声:AAC/ADTS形式)。

以下では、Windows PCM フォーマット(拡張子 .wav)のファイルを読み込み、チャンネル数やサンプリング周波数等の情報の表示を行なっています(WAVE/PCM 音声の生成)。
実行結果

0 件のコメント:

コメントを投稿