らんだむな記憶

blogというものを体験してみようか!的なー

pythonとバイナリ

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導入が記載されているので・・・標準機能で「ビッグエンディアンでこの構造読み出せよー」ができるのは大分先なのかな・・・。