投稿者 tel | 2012年4月26日

ofstreamでバイナリデータを書き込む

ofstreamでファイルにバイナリデータを書き込もうと思ったらなんかちょっと面倒だったのでメモ。

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
ofstream ofs("out.bin", ios::binary);

unsigned int a = 0xFFFFFFFF;

// 文字列として書き込まれる
ofs << a;

// バイナリとして書き込む
ofs.write(reinterpret_cast<char *>(&a), sizeof(a));

if(ofs.bad()) {
cout << "error" << endl;
}

return 0;
}

上記のコードを実行すると次のようなファイルができる。unsigned int型の0xFFFFFFFFデータを書き込んだつもりなのに前半部分は変なことになってる。

14 byte
           000102030405060708090a0b0c0d0e0f
  ----------------------------------------------------------
  00000000 34323934393637323935ffffffff     4294967295....

ios::binaryをつけたらバイナリとして扱われるかと思ったら<<で書き込もうとすると文字列に変換されてしまった。しょうがないのでwriteにしたら引数がconst char *なのでreinterpret_castしないといけなかった。

なんかあんまりスマートじゃない。


コメントを残す

カテゴリー