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しないといけなかった。
なんかあんまりスマートじゃない。
コメントを残す