とらりもんHOME  Index  Search  Changes  Login

情報のデジタル表現: (3) バイナリ型式

バイナリ形式

バイナリデータ(バイナリ形式のデータ)はバイトの羅列なので、それを意味のある数字として認識するには、いくつかのバイトのかたまりをどのようにしてひとつの数として認識するかというルール(形式)が必要である。それらは主に以下のようなものである:

   形式	        名称	       表現可能な数の範囲
   符号なし整数(1バイト)	"unsigned char"	   0〜255
   符号付き整数(1バイト)	"signed char"	   -128〜127
   符号なし整数(2バイト)	"unsigned short"   0〜65535
   符号付き整数(2バイト)	"signed short"	   -32768〜32767
   符号なし整数(4バイト)	"unsigned long"	   0〜4294967296
   符号付き整数(4バイト)	"signed long"	   -2147483648〜2147483647
   浮動小数点実数(4バイト)	"IEEE single float"  1.17549435E-38〜 3.40282347E38
   注: ↑上で, 「E-38」というのは, 「10の-38乗」を意味する。同様に, 「E38」というのは, 「10の38乗」を意味する。
   浮動小数点実数(8バイト)	"IEEE double float"  とんでもなく広い範囲

エンディアン

バイナリデータを認識する場合、複数バイトをひとまとまりとして認識する形式では、上位のバイト(桁の大きなほう)と下位のバイト(桁の小さなほう)を、どちらを先に記述するかが問題になる。これをバイトオーダー(byte order)もしくはエンディアン(endian)という。大きい桁を先に書くのが、我々の10進法の世界でも常識的であり、そのような記法、つまり上位バイトを先に書く方法をbig endianと呼ぶ(most significant byte firstとも言い、MSBもしくはMと略記することがある)。それに対して、下位バイトを先に書く方法をlittle endianと呼ぶ(least significant byte firstとも言い、LSBもしくはLと略記することがある)。これらは計算機の中央演算処理装置(CPU)の仕様で決まっている。つまり、全く同じソフトや同じOSを使っていても、CPUが違えばエンディアンが違う可能性がある。これは画像データの処理でしばしば大きな問題となる。

  • big endianの例: SUN/sparc, IBM・Motorola・アップル/Power PCなど
  • little endianの例: Intel/PentiumやIntel/CeleronなどのいわゆるIntelアーキテクチャ, Dec/Alphaなど

従って、異なるシステム間でバイナリデータををやりとりするときは、エンディアンを正しく認識し、随時、適切な形式に変換しなければならない。たとえば、一般に、画像データの多くはSunやIBMの計算機で処理されるので、バイナリの画像データをIntelアーキテクチャの計算機で処理するときには問題になることがある。

Last modified:2019/01/23 10:40:42
Keyword(s):
References: