できる気がしてきた。

僕の興味のあることを共有します。

Base64 エンコーダを書いた

CodeIQさんでBase64に関する話題があったのですが、 「Base64エンコーダ、デコーダを書いたことないのが許されるのは小学生までだよねー。」という天の声が聞こえたので書くことにしました。

Base64とは

1バイト文字を扱いたけど、もろもろの規格上の制限で1文字6bitでしか読まれない時のエンコードの仕組み?らしいです。 私はコーディングの課題として面白そうってくらいしか目的がありませんが、世の中に役に立ってるようです。詳しくは参考文献を見て下さい。

実装

ビット演算云々が必要そうなのと、直感で良さそうと思ったので、C++で書くことにしました。

使ったもの

  • std::iostream
  • std::bitset
  • std::vector
  • std::string

引っかかったところ

Base64の仕様にあるパディングの調整です。 結果的には

ceil(str.size()/3.0)*3-str.size() 

で入力文字から出力文字列のパディングの文字数が求められます。 参考文献の表とかを見てもらえば、なんとなく正しいことがわかるかと思います。

base64 encoder

参考文献