プログラムTIPS

DEMO PROGRAM ヘキサドライブでは様々な研究開発をしています。その一部を紹介。

読んだら・・・書いてみよう(2009年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です。

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

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

【免責事項】

本サイトが提供している情報に関しては、安全性等、いかなる保証もされません。 株式会社ヘキサドライブは、これらの情報をあなたが利用することによって生ずるいかなる損害に対しても一切責任を負いません。

【著作権】

本サイトが提供しているコンテンツについては、特に断りのある場合を除き、株式会社ヘキサドライブが著作権を有します。