MENU閉じる

LAB

RubyプログラムTIPS

研究室プログラムTIPSRuby2009.4.15

読んだら・・・書いてみよう

過去3回にわたり、Ruby言語でいろいろなデータを読んできましたが、
実際にC/C++言語のプログラムで読み込むバイナリデータとして
書き出していませんでした。
今回は、書き出しを行ってみたいと思います。

まずはサクッとスクリプトを書いてみました。
内容は、固定長の数値データをバイナリとして書き出しています。

# テキストファイルから読み込んだという仮定のデータ
dataArray = Array.new
dataArray.push([1, 2, 3, 4, 5, 6])
dataArray.push([7, 8, 9, 10, 11, 12])
<br />
# バイナリモードでファイルを開く
dataFile = File.open(&quot;data.bin&quot;, &quot;wb&quot;)
<br />
# 書き込み<br />
dataArray.each do | data |
&nbsp; # 個々の数値を符号なし32bitで出力
&nbsp; dataFile.write data.pack(&quot;L*&quot;)
end

# ファイルを閉じる
dataFile.close

書き出した結果をバイナリエディタで見ると下の通りになります。
読み込んだ数値が32Bitでちゃんと出力されてますね。

01000000 02000000 03000000 04000000
05000000 06000000 07000000 08000000
09000000 0A000000 0B000000 0C000000

ちなみに、符号のありなしや出力する際のビット数、
エンディアンは指定できます。

後は、データを読む側のC/C++のプログラムを
書けば使うことが出来ますね。

実際のデータはここまでシンプルではないかもしれませんが、
データ作成に必要な要素は上のスクリプトや今までの日記に含まれています。
必要とされるフォーマットにあわせて読み込むファイルや
書き出し方を変えればOKです。

コメント文でも書いてますが、バイナリモードで開くことをお忘れなく。
テキストモードだとキャリッジリターンが含まれるので、
データサイズがずれてしまいます。
もちろん!! 私は間違えて、小一時間悩んだことがあります。

短いコードと言えども油断せず、その恩恵に与りたいですね。

RECRUIT

大阪・東京共にスタッフを募集しています。
特にキャリア採用のプログラマー・アーティストに興味がある方は下のボタンをクリックしてください

RECRUIT SITE