2022-05-16
#js 
バイナリをテキスト化する表現にはいろいろあります。

バイナリデータ1byteは0から255までの256種類なので、10進法3桁を使って001002003と表記することは可能です。ただ、1byteのデータが3倍にも増えてしまいます。16進法を使うと2桁で1byteを表せるので2倍にまで縮みます。現代でも比較的使われるBase64(ベース・ロクヨン)は、数字やアルファベットと一部記号の64種類を使って、1文字で6bit分表現できるので、元のデータの1.33倍で表現できます。

アルファベットではなく、日本語のかな50音表を使ったBase50を作ってみました。
「Base50」

Base50表現の「たえやうすなれむろかもうつ」は「IchigoJam」を表します。

下記コードで、JavaScriptで変換できます。(ES-Jamや、Denoでお試しください) import { Base50 } from "https://code4fukui.github.io/Base50/Base50.js"; console.log(new TextDecoder().decode(Base50.decode("たえやうすなれむろかもうつ"))); console.log(Base50.encode(new TextEncoder().encode("IchigoJam"))); 50音といいながら、実際は46音しかないのが謎ですが、仕様です。


「Base50 src on GitHub」

Base50は、鍵のエンコードなどで使われるBase58のbaseN.jsを使ってサクッと作れます。


「Base58 src on GitHub」

ただ、できればバイナリはバイナリのまま使いましょう。JSONの上位互換、CBOR(シーボル)がオススメです。
ブラウザでもサーバーでも気軽に使えるバイナリフォーマットCBORをESモジュールにした「CBOR-es」公開

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS