とらりもんHOME  Index  Search  Changes  Login

バイナリーデータ処理

はじめに

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

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

テキストファイルは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バイト整数の場合は、地理情報データの多くは非負で表現されていることが多いので注意。

  • 課題-1binary_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コマンドを用いる:

$ 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入門に戻る>

Last modified:2015/10/10 15:02:56
Keyword(s):
References:[Unix/Linux入門] [2018_実用解析]