とらりもんHOME  Index  Search  Changes  Login

とらりもん - バイナリーデータ処理 Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

!はじめに
地理情報データ、特に衛星データは、バイナリー形式で記述されることが多い。バイナリーデータは、テキストに較べて少ない容量でデータを表現できるからである。ここでは、バイナリーファイルの中をのぞいたり、簡単な変換処理を行うことを学ぶ。

*バイナリーとは:[[ウィキペディアでの解説|http://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA]]

!バイナリーファイルの表示

テキストファイルはcatやlessで内容を見ることができるが、バイナリーファイルは''od''というコマンドで内容を見る。

1バイト整数データを10進数表示: $ od -t d1 filename
1バイト整数データを非負10進数表示: $ od -t u1 filename
2バイト整数データを10進数表示: $ od -t d2 filename
4バイト実数データを10進数表示: $ od -t f4 filename
8バイト実数データを10進数表示: $ od -t f8 filename

特に1バイト整数の場合は、地理情報データの多くは非負で表現されていることが多いので注意。

*''課題-1'': [[binary_data_test.tar.gz|http://pen.agbi.tsukuba.ac.jp/~torarimon/data4download/binary_data_test.tar.gz]][[binary_data_test.tar.gz|http://pen.envr.tsukuba.ac.jp/~torarimon/data4download/binary_data_test.tar.gz]]をダウンロードし、解凍・展開せよ(ヒント:tar zxvfを使う)。

*''課題-2'': カレントディレクトリを、ホームディレクトリからbinary_data_test/に移動せよ。

*''課題-3'': 0から255の数値を順に並べたファイルである、0_255.rawと0_255.txtのサイズを較べよ。前者はバイナリー、後者はテキストである。

*''課題-4'': 0_255.txtの内容を表示せよ。

*''課題-5'': 0_255.rawの内容を、1バイト整数10進数表示と1バイト整数非負10進数表示の両方で表示せよ。

*''課題-6'': 0_1020.rawは、0から1020までの数値を(4きざみで)2バイト整数で並べたバイナリーファイルである。内容を表示せよ。

*''課題-7'': real_number.rawは、ある実数をIEEE 4-byte float (単精度浮動小数点実数)で表したバイナリーファイルである。内容を表示せよ。

*''課題-8'': real_number.raw.doubleは、前問と同じ実数をIEEE 8-byte float (倍精度浮動小数点実数)で表したバイナリーファイルである。内容を表示せよ。

!エンディアンの変換

データが複数バイトの数値で表現される場合、''エンディアン''が問題になる。特に、衛星データや地形データでは、2バイト整数での表現が多いので、2バイトの順序の入れ換えが頻繁に必要になる。それを行うには、''ddコマンド''を用いる:

*エンディアンとは:[[ASCIIデジタル用語辞典での解説|http://yougo.ascii.jp/caltar/%E3%82%A8%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%B3]]

$ dd if=入力ファイルの名前 of=出力ファイルの名前 conv=swab

*''課題-9'': 上の課題-1のアーカイブにおいて、0_1020.raw.BigEndianというファイルを2バイト整数データを10進数表示で表示せよ。

*''課題-10'': このファイルのエンディアンを変換し、test.rawという名のファイルに書き出せ。

*''課題-11'': test.rawの内容を、2バイト整数データ10進数表示で表示せよ。

*''課題-12'': odコマンドのマニュアルを閲覧せよ。

*''課題-13'': ddコマンドのマニュアルを閲覧せよ。

<[[Unix/Linux入門]]に戻る>