next up previous contents index
Next: 一般データの保存と読み込み Up: データのファイル入出力 Previous: 一般データのファイル入出力

バイナリデータのファイル入出力

                             関数fread(fd, size, type)は指定したファイルからバイナリデータ を読み込み,それを成分とする行ベクトルを返す。読み込みに失敗すると, 0 x 0の行列を返す。 fdfopen()が返すファイルディスクリプタ,sizeは 読み込むデータ数,typeは読み込むデータの型である。type には,C言語のデータの型を指定する。以下の表に指定できる型を示す。 ただし,符合あり(signed)の型を指定できないことがある。 また,fread(fd, size, type, 1)はバイナリデータの数値形式 (Endian)を変更して行ベクトルを返す。


 
表 4.1: バイナリデータの型
type データ型
"char" 文字 (8 bits)
"signed char" 符合あり文字 (8 bits)
"unsigned char" 符合なし文字 (8 bits)
"short" 整数 (16 bits)
"signed short" 符合あり整数 (16 bits)
"unsigned short" 符合なし整数 (16 bits)
"int" 整数 (16,32,64 bits)
"signed int" 符合あり整数 (16,32,64 bits)
"unsigned int" 符合なし整数 (16,32,64 bits)
"long" 整数 (32 bits)
"signed long" 符合あり整数 (32 bits)
"unsigned long" 符合なし整数 (32 bits)
"float" 単精度浮動小数点数 (32 bits)
"double" 倍精度浮動小数点数 (32 bits)

関数fwrite(fd, mat, type)は行列matの成分を指定したファイル に指定したデータ型のバイナリで書き込む。データは行の順に書き込まれる。 fdfopen()が返すファイルディスクリプタ,matは 書き込む行列,typeは書き込むデータの型である。type には,C言語のデータの型を指定する。

行列の成分をint型のバイナリでファイルに保存し, そのデータを別の行列に読み込む例を以下に示す。


  // 行列 A を int 型のバイナリデータとして保存する
  A = [1 2 3 4 5];
  fd = fopen("data", "w");
  fwrite(fd, A, "int");
  fclose(fd);

  // 5 個の int 型のバイナリデータを行列 B に読み込む 
  fd = fopen("data", "r");
  B = fread(fd, 5, "int");
  fclose(fd);  

  // 3 個の double 型のバイナリデータをEndianを変更
  // して行列 C に読み込む
  fd = fopen("data", r");
  C = fread(fd, 3, "double", 1);
  fclose(fd);


     なお,使用中の計算機のバイナリの数値形式(Endian)は,関数 machine_endian()で調べることができる。この関数は IEEE Little Endian (PC, 386, 486, etc.)のとき 0 を返し, IEEE Big Endian (SPARC, Motorola, etc.)のとき 1 を返す。


next up previous contents index
Next: 一般データの保存と読み込み Up: データのファイル入出力 Previous: 一般データのファイル入出力
Masanobu KOGA 平成10年8月19日