容量削減のために「○進数」に向きあった時の話

てちてちエンジニアのおっとーです。

皆さん○進数を使った開発経験ってありますでしょうか?
2進数、8進数、16進数とかなら、基礎知識として勉強したことがある方も多いとは思うのですが、
それを開発や、業務に生かしたことが無い人も多いのではないのでしょうか。

実際に私はそれまで○進数を開発で用いたことはありませんでした。
(10進数も○進数だとか言わないでください。)

そんな私が実際に○進数を使って、開発課題に向き合い無事に解決することができたので、
備忘録として残しながら同じ課題に直面した人たちの助けになればと思い記事を書いてます。

私の当時参加したプロジェクトではEXCELのツールを作成していました。

EXCELのツールは顧客からの要望で一定容量以内に抑えなければいけないという制約があったのですが、
そのツールは幾度の商品改良を経て私が出会った時にはすでに容量ギリギリの状態でした。

そして私はその容量削減を任されることになりました。

決して数字には強く無い私、最初にそのツールを開いた時は絶望しかありませんでした。

画面一面に広がる英数字の羅列、難解な処理仕様書、何度心が折れかけたか・・・。

しかし、その英数字が16進数で表記されたものということを知り、16進数は容量削減のために使用していると知り、希望の光が見えました。
「16進数以上の進数を使えばいいじゃん」と実現方法を探しました。

案の定組み込み関数には16進数までしか存在していないため、自作することになりました。

とりあえず数が大きければ大きいほどいいだろうと、
「154進数作っちゃえ」と意気込みコーディングをしました。
とりあえず0-9、a-z、A-Z、あ-ん、ア-ンをカンマ区切りでつなげた文字列を作成し、
split関数で配列に変えて、
引数154で割って、余りを変換して・・・・

出来上がったロジックでいざ変換!

出来上がった文字と数字の羅列をパッと見た感じうまく行ってそうだけど、文字化けみたいでした。

そして肝心の容量は・・・・・


16進数時より増加していたのです。
結果、154進数は撃沈しました。

その後の調査で原因は文字そのものの容量が異なるため、全角文字を使ったり、半角カナを使うと進数増やして桁数削っても文字単体の容量が増えるため逆効果という結論でした。
1byte文字という言葉を検索したのはこの時が初めてでした。

1byte文字の存在をしり、変換に用いる文字と数字をアルファベットと0-9にしぼりました。

そんなこんなで最終的に62進数収まったという話でした。

0-910個
a-z26個
A-Z26個

皆さんも数字(整数)の取り扱いで容量を削減しなくては行けない場面に直面したら、
ぜひ62進数試してみてください。


ちなみにEXCELだと「=」とか記号が変な挙動起こしそうなので、あえて使わなかったですが、
1byte文字は色々あるので他の環境であれば62進数以上使ってもっと容量削減できると思います。

コメント

タイトルとURLをコピーしました