やる気がストロングZERO

やる気のストロングスタイル

圧縮アルゴリズムを書いてみたことでバイト列に対する感覚が定着した

普段プログラムを書いていてもバイト列を意識しないといけないことがあまり無いので、バイト列に対する感覚がイマイチだった。

「大規模サービス技術入門」の中に「圧縮アルゴリズムを書いてみる」という内容があり、pythonで実際に書いてみたら意図せず定着した。

書いたアルゴリズムの概要

intの1というデータは4byteで表現されていて、バイナリで表現すると
00000000,00000000,00000000,00000001([,]は1byte区切り)
となる。

この場合上位の3バイトは別に使われていないからカットして
00000001
で保存すれば3byte節約できる、
というような圧縮アルゴリズムを書いた。

textファイルで表現される文字と、それがどうやってバイト列で表現されているのかを強く意識して書く必要があった。

※バイト列を扱っているのに、出力してみると勝手にいい感じに文字列表現に変換されて表示されたりして「そっかターミナルも文字列しか表示できないもんな」と当たり前の事を実感したりした。

理解出来たこと

エディタが特定のバイト配列を文字と紐付けて文字を表示しているから、文字エンコードにないバイト配列は表示できない。
その文字列に対応付けられないバイト配列には別の意味(今回の場合は特定のルールで使用バイト列を少なくして表現した数値データ)があって、そういう形で書き出されたファイルがバイナリファイルであることが理解できた。

バイト列について理解出来たことで、文字コードまわりの理解もやっと定着した。
文字コードについて何度か勉強したが、Unicodeとutf8,ftf16などの違いの理解がすぐにぼやけてしまっていた。
バイト列に対する感覚が定着したことで、それぞれの意味している事が明確に理解できるようになった。