無為空間
むいむい(´ω`*)
Entries
構造体をそっくりそのままバイナリデータとして読み込んだり保存しなければならないときに重宝するライブラリ。
メンバ変数をこのライブラリの型で表すだけで、保存先データと実行環境のエンディアンの違いを吸収する。
試しにlzhファイルのヘッダを読んでみる。
#include <iostream> #include <fstream> #include <string> #include <boost/integer/endian.hpp> using namespace boost::integer; #pragma pack(push, 1) // 念のため struct lha2_header { little16_t hedsize; little8_t method[5]; little32_t packed; little32_t original; little32_t time; little8_t attrib; little8_t level; little16_t filecrc; little8_t OSmark; }; #pragma pack(pop) int main(int argc, char** argv) { if(argc < 0) return 1; std::ifstream ifs(argv[1],std::ios::in | std::ios::binary); lha2_header h; ifs.read(reinterpret_cast<char*>(&h), sizeof(h)); std::cout << "hedsize:" << static_cast<unsigned int>(h.hedsize) << std::endl; std::cout << "method:" << std::string(reinterpret_cast<char*>(h.method), 5) << std::endl; std::cout << "OSmark:" << static_cast<char>(h.OSmark) << std::endl; return 0; }
実行結果
……ってIntel Macじゃ試しになってないな。
スポンサーサイト
コメント
コメントの投稿
トラックバック
- トラックバック URL
- http://idlysphere.blog66.fc2.com/tb.php/13-4f28c367
- この記事にトラックバックする(FC2ブログユーザー)