カレンダー

2015/02
       
       

広告

Twitter

記事検索

ランダムボタン

久々のPerl

by 唐草 [2015/02/05]



 昨日から変態としか言えないような気持ちの悪いデータを扱っている。ちょっと専門的な話になるが、コンピュータ上で扱うデータの並びには2通りある。リトルエンディアンとビッグエンディアン。すごく雑に書けば、右揃えと左揃えのようなものだ。表す数は同じでも、データの並びが異なっている。どちらにもメリットがあるので、処理系や環境によってどちらか一方が採用されている。
 相互変換もそう難しくはない。
 だが、昨日から扱っているデータは、ビッグエンディアン並びのデータが、リトルエンディアンで格納されているとでも呼ぶべき状況になっていた。先頭bitが揃えてあるのなら容易に変換できるのだが、7bitと10bitのデータが隙間無く並んでおりアドレスとデータ開始位置に明確な関連性を見いだすのは難しい。ファイルの先頭から何個目のデータになるのかを計算しないと先頭bitを見つけることはできない。
 と、こんな説明を読んでもなんのことかサッパリ分かってもらえないだろう。でも、安心して欲しい。ぼくだって、いろいろはしょって書いているので、上記の文章が正確でないことを知っている。読者の方には、ぼくが味わったであろう訳の分からなさを上の文章から追体験してもらえれば幸いだ。もう少し続けよう。
 999を16進数で表すと0x3e7。リトルエンディアンだとデータ並びは、e7 03となる。ビッグエンディアンだと03 e7となる。
 今回の処理系だと基本はリトルエンディアンなのだが、該当する場所だけ先頭bitズレしたビッグエンディアンなので、あるアドレスでは0f dcが999になる。しかも前後に隙間無く他のデータがくっついているので、ff dfでも該当の場所は999のままだったりする。具体例を書いたのにまったく理解できないことだろう。だから、ぼくは初めに変態だと言ったわけだ。
 こんな理解しがたいデータ並びを手計算で処理できるわけがない。当然プログラムの力に頼ることになる。人間の頭はbit演算には適していない。
 今日のオトモに選んだ言語はPerlだった。手元のPCにはJavaとPerlが入っていたが、数値を雑に扱えるという信じがたい選考基準に合致するのはPerlだからだ。
 選んでから気がついたことがある。久々すぎてPerlの細かい記述方法を完全に忘れていた。pack/unpack関数を使いたいのに全然使い方が分からなくなっていた。リファレンスを読んでも理解出来ないほどにあれこれ忘れていたようだ。
 こんな具合にPerlを使うことは稀だ。でも、PC内で何かを処理しようとした際にPerlがあると心強い。あまり使うことは無いけれど、インストールされていないと不安になる。それが、ぼくにとってのPerlのポジション。当然Windows機にもインストールしている。