• ベストアンサー

バイナリファイルとプログラミング

バイナリファイルとプログラミング 今、とあるバイナリファイル(NIfTI)をC言語で可視化したいと思っています。 ただバイナリファイルを利用するにはフォーマットさえわかればいいんでしょうか? http://nifti.nimh.nih.gov/nifti-1/ のようなフォーマットの形式を見ても 実際にプログラミングではどういう風にやっていけばいいのか何もわかりません。 アドバイスをお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

フォーマットがわかればいいですが、 イメージファイルの読み書きを自分で実装する必要は どうやらなさそうです。 せっかくリファレンスコードが有るんだから、それを見ない手はありませんよ。 "Reference Implementation"の項目のコードをまずは見てみましょう。 リファレンスを見るときは、 まず、先人がどういうプログラムを書いているか見ましょう。 つまり、下記にあるプログラムですね。 http://nifti.nimh.nih.gov/pub/dist/src/examples/ この中の例えば http://nifti.nimh.nih.gov/pub/dist/src/examples/clib_01_read_write.c を見ると、nifti_image_readという関数でそのイメージファイルが 読み出せるように見えます。 こんな関数はC言語にもとからある関数ではないので、 nifti1_io.hでインクルードされた関数だと思います。 まず、http://nifti.nimh.nih.gov/pub/dist/src/include/を見ると 空っぽなので、ライブラリがヘッダも持っているのではないかと あたりを付けて、http://nifti.nimh.nih.gov/pub/dist/src/niftilib/を 見ます。すると、nifti1_io.hが見つかるのでこのコメントを読んで どういう関数なのか学びます。 あとはclib_01_read_write.cを少しずつ書き換えて自分が望む機能を 実装すれば完成です。 データが読めるのかに付いても、まずはTest Data Setsのファイルを 最初のclib_01_read_write.cで読み書きしてから始めたら安心です。 自分で作る場合は、DocumentationのFormat specificationに ある通りに作ればいいんでしょうけれど、ヘッダから各々の要素までの順番や構成の オーバービューが全く示されていないので何をどの順番で並べてどの順番で 読めばいいのかが全く不明ですね。 まぁ、こんなものは読まずに上で書いた通りexamplesのファイルを 改造して目的のものを作った方がいいと思います。

yuikuras
質問者

お礼

大変わかりやすかったです。 とりあえずヘッダーと同名のプログラムをexampleのソースに組み込んで作っていけばいいんですかね?そうしたところ一応コンパイルはできました。 また、「ライブラリがヘッダも持っているのではないか」というのはどういうことでしょうか? includeとlibのフォルダに何も入ってないのは私も疑問でした。 MakeファイルがあるのでLinuxならmakeするのかと思いましたが、今の環境はWindowsなのでどうすることもできませんでしたので。

その他の回答 (1)

回答No.1

> ただバイナリファイルを利用するにはフォーマットさえわかればいいんでしょうか?  そりゃ、ただのバイナリデータとして扱う範囲ではフォーマットだけでもなんとかなるかもしれませんが、意味のあるデータとして利用するなら、そのフォーマットの中のデータの意味がわかってないと何にもなりません。  あと、自分が何をしたいのかを具体的にイメージ出来なければ、そのデータをどうやって利用していくかという目処も立たないでしょう。

yuikuras
質問者

補足

その通りなんですが、肝心のフォーマットを見てもバイナリデータとどうやって結びつければいいのかわからないんですよ。データ構造みたいなのはドキュメントに書いてあるんですが、それからどうバイナリファイルを利用するかのアドバイスをお願いします。

関連するQ&A

  • exeファイルを作成できるプログラミング言語

    私は最近プログラミングを始めたばかりで、 まだCとC++とアセンブリを少し知ってる程度です。 この3つのプログラミング言語ではexeファイルを作成できるのは 知ってるのですが、他のプログラミング言語でもexeファイルなどの 実行形式ファイルを作成できるのでしょうか?

  • バイナリファイルなのですが・・・。

    研究用のデータを受け取ったのですが、テキストではなくバイナリファイルでもらいました。データを取得した人によると、↓にある装置を使って時系列データをintel86系バイナリフォーマットで記録したと言っていました。 http://www.sonysms.co.jp/j/products/datarecorder/pdf/SONY_PCscan3_jp.pdf どうにかしてこのバイナリファイルをテキストに変換して、データを取得したいのですが、どうしたらよいのでしょうか? ネットにあるバイナリ→テキスト変換ツールを使いましたが、16進数の数字が羅列されるだけで、エクセルなどで読めるデータ形式にはなりませんでした。

  • C言語でバイナリファイルの読み込み

    C言語のプログラミングに関する質問です。 x個(分かっている数)のfloat型の数値が入ったバイナリファイルを読み込んで、 要素数[x]のfloat型配列として扱うにはどういったコードを書けばよいのでしょうか? どなたかご教授いただければ幸いです。

  • バイナリファイルの読込み(小数の扱いについて)

    お世話になっています。 今、バイナリファイル(BSQフォーマット)を読み込むプログラムをC言語で書こうとしています。バイナリファイルの内容は数字(実数)の配列です。 そのバイナリファイルは、1数字につき2バイトしかなく、浮動小数点(float4バイトとdouble8バイト)などが使えませんでした。 なので、固定小数点なのかと思い、1バイトずつcharで読み込んだところ整数部分だけうまく読み込めました。しかし小数部分がうまくいきませんでした。 バイナリエディタで見たところ以下のようになっていました。 例:C2 FF(or 00) (この値が-62になることは分かっています。) しかし、上記の方法で読み込んだ結果は-62 -1でした。 そこで質問なのですが、 (1)2バイトの実数を1バイトで区切って整数と小数に分けて行うことなどあるのでしょうか? (2)上記の方法で行った場合、FFが-1になり、00も-1になってしまいます。本来なら小数部分のFFも00も値は0にならなければいけないのですが・・・。これは、どのように解決すればいいのでしょうか? 部分的に間違っている。根本的に間違っている。などなど アドバイスよろしくお願いします。

  • C++のバイナリファイル読み込み

    C++を勉強しています。 例えばバイナリファイルがあって、例えば5バイトおきに10バイトずつ読み込むという場合についてどうすればいいか考えています。(5~15,20~30,35~45のような) 調べてみるとseekgなどが使える??と思ったんですが,プログラミング得意じゃないんでいまいち分かりませんでした。 質問内容からしてプログラムを何も分かってないと思われるかと思いますが,ご教授お願いします

  • テキストファイルをバイナリファイルに変換

    -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, 130, 120, 120, 109, 100, 100, 94, 91, 90, 89, 87, -32768, 78, 71, … と続いていくテキストファイルのデータをバイナリデータにC言語で変換したいのですが、どうすれば変換出来るのでしょうか。

  • プログラミングで困ってます

    与えられた画像ファイルをC言語によって、配列に読み込み、新しい画像ファイルとして 書き出そうとしましたが、できませんでした。 画像データを読み込むための配列は2次元配列で、ポインタを用いた動的メモリの確保を行います。 また、読み込みと書き込みは関数として定義します。 画像ファイルの仕様は ・8bitグレースケール画像 ・画像サイズは512*512 ・Rawフォーマット(画素値はラスタスキャン順にバイナリ形式で保存)

  • オブジェクトファイルのファイルフォーマット

    オブジェクトファイルのファイルフォーマット ELF/DWARF2形式について調べています。 C言語で作ったプログラムをコンパイルし生成されるオブジェクトファイルをバイナリエディタで開き、アセンブリ言語と比較すると、オブジェクトファイルの最初と最後にプログラムの内容(命令)と直接関係ないものが含まれていることが分かりました。 例えば、オブジェクトファイルのある場所や、コンパイルされた日時などです。(これらの情報はテキストだったので判別ができました。) インターネットで調べたところ、生成されたオブジェクトファイルがELF/DWARF2形式とうフォーマットで作られているというところまでは分かりました。 実際のオブジェクトファイルのヘッダとフッタ(命令の前後)を除いて、純粋な機械語(命令)の部分を取り出したいのですが、このELF/DWARF2形式というフォーマットでは、どうすれば、純粋な機械語の始まりと終わりを読み取ることができるでしょうか? よろしくお願いいたします。

  • バイナリ形式のXMLファイルを読み書きしたいです

    Denemoというソフトが出力した .denemo ファイルを読み書きしたいのです。 .denemo ファイルは MusicXML という形式のようなのですが、バイナリファイルなのでどのように扱えば良いのかわからず質問しました。 XML parser というものが関係あるようなのですが、よくわかりません。 まずは、バイナリ形式のXMLをテキスト形式で読みたい。 次に、バイナリ形式のXMLをプログラム(C++)で操作して読み書きしたい。 と、思っています。 OS は Windows XP で、コンパイラは g++ を使用しています。 よろしくお願いいたします_(_ _)_

  • 画像(bmp等)の保存形式について

    画像(bmp等)の保存形式について 画像の保存のフォーマットについて質問です。 bmpの形式についてのwebページをみてみたんですが、 structを書いてメンバをかいていたりするんですが、 bmpのファイルをテキストエディタでみてみてもうまくみれないし、 やっぱりバイナリエディタでみると数字の羅列なんですが、 実際に作る場合にはstructとかを書いた後に使うコンパイラみたいなものがあるんでしょうか? struct等C言語のプログラミングの知識はあります。 よろしくお願いします。