2014年6月8日日曜日

C++のifstreamで0x20が読み込めない。

C++のifstreamを使ってバイナリファイルを読み込もうとしたんですよ。
こんな感じでね。
std::ifstream ifs(path,std::ios::in | std::ios::binary);
unsigned char c;
do {
    ifs >> c;
    std::count << (int)c;
} while(!ifs.eof());
そしたら特定のバイトだけ読み込まないんですよ。
どうも勝手にスキップされている。

"0x20"を読み込む時だけスキップされている。

ASCIIコード上で空白(0x20)なので、それが原因なのかもしれない?
暗黙の型変換か何か?

ifstraem::read()を使う事でこの問題を回避出来ました。
まさかこんなところにトラップがあるとは思わなかったよ…