Cで書きたくない・・・というかコンパイルめんどいのでpythonでバイナリを解析しようかと。
データ構造がない場合はちょっとずつ読み込んで・・・となるかもしれないが、わりとかっちりした構造があるならPythonでバイナリをあつかうためのTipsのようにctypes.Structure
を使うのも便利だなと思った。なんかこのままだとCPUのエンディアンに引っ張られるようなので、昨今はLittleEndianで読まれるだろうか。わりかしほげほげ規格みたいなので定義されたデータはビッグエンディアンで定義されていることが多いように思うが(ネットワークバイトオーダーがそうだから?)、そのままctypes.Structure
だと2バイト以上の数値を読み込むのに都合が悪かった。適当に調べたらctypes.BigEndianStructure
でいけた。結構楽だった。fread
で構造体に読み込んで、数値を反転させるとかやってられない。
近頃のC++ならstd::xxx
に入り込んだboostの残骸でできるんだろうなーと思ったがそうでもない・・・?
endian - cpprefjp C++日本語リファレンスにC++20でのstd::endian
導入が記載されているので・・・標準機能で「ビッグエンディアンでこの構造読み出せよー」ができるのは大分先なのかな・・・。