|
setup diary |
まれに、binaryのデータを扱う必要が出てくる場合がある。データ構造が公開されている場合には問題無いのだが、それが公開されていない場合には、自分で解析する必要がある。
時々使用するある装置のデータはbinaryで保存されていて、普段はこれを付属のtoolでasciiにしている。この時の操作が面倒なので、以前に変換プログラムを書こうと思ったが、構造が分からずに挫折していた。最近、また思い立って解析を試みた。このとき、rubyのunpackを思い出して、これを使ったところ、最低限の解析に成功した。
整数の場合は、データの並びを見れば大体予想ができるが、今回は小数を扱っていたので、データを見てもいまいち分からなかった。結局、dataにbinaryを入れて、
p data.unpack("E")などとして、それっぽい数字が出てくるものを探していった。
最終的には、すべてのデータはdoubleで保存されていただけだったのだが、これは予想外だった。有効数字が6桁ぐらいしかないのに、floatでも十分なのだが。実際、asciiに変換したものの方がファイルサイズが小さくなっている。binaryで保存している意味が無いような気がする。データを解析する前に、このことに気がついていれば、doubleだと推定できたのかもしれないが、最初はfloatぐらいだろうと思って、いろいろと試していて、時間がかかってしまった。