バイナリの入出力

hoge.dat から読み込み
#include <iostream>
#include <fstream>
...
fstream fin("hoge.dat", ios::open | ios::binary);
if( !fin ){
  /* file open error */
}
std::ios::off_type offset = 10;    ← 10 byte 分のオフセット
fin.seekg( offset, ios::beg );     ← 読み出し位置を指定

char buf;    ← バイナリは char 読み出しが基本。
while( fin.read( &buf, sizeof(char) ) ){
  /* TODO */
}
一気に読み出し
char buf[256];
while( fin.read( buf, 256*sizeof(char) ) ){
  /* TODO */
}
注. charの符号
gcc では、char は自動的に符号無し8bit整数 unsigned char と解釈される。←されませんでした。
VC++ では、char は自動的に符号有り8bit整数 singed char と解釈される。

したがって 1byte unsigned integer の場合は unsigned char とする。
べきだが、なぜかこうすると read( &buf, ... ) のコンパイルが通らなかった。
← char bufとしておいて,二重キャストで対処。(double) (unsigned char) buf

以下は失敗する!

while( fin >> buf ){
  /* tasks with buf */
}
すべてが読み込めないのではなく、一部の、同じ箇所のバイトを飛ばす。謎
最終更新:2010年05月27日 13:25
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。