いつもお世話になっております。
そろそろ、ブロックチェーンに、任意のデータ書き込みを始めていく見込みです。
ところが、この書き込みには「厳しめなサイズ制限」があります。
なぜなら、ネットワークへの負担を軽減するため、大きいサイズには、それなりの手数料がかかるためです。
そして、標準ではchar型のUTF-8を使うべきなのですが、これを使いますと……英数字は1バイトで済みますが、日本語は、そのほとんどが「3バイト」を使うことになります。
実際に、ちょっとした文章(同じニュアンス)で、サイズに2倍以上の差が出てきます。これは、英文なら安くて済みますが、日本語だと高くなることを意味いたします……。そこで、ほとんどが「2バイト」になるUTF-16があります。
UTF-16は最小単位がwchar_t、すなわち2バイトなので、英数字も2バイトです。そして、日本語などの漢字などを含む言語も、そのほとんどが2バイトで済みます。これなら、同じニュアンスではあまり差が出ず、手数料も良い感じになりますね。
なお……CP-932なら英数字は1バイト、日本語は2バイトで丸く収まるのですが、これは、色々な意味で使えない……ため、除外しております。
ただし、std::string, std::wstring, std::ostringstream, std::wostringstreamなどを使い回すと手間がかかる上、文字コード変換のstdが……「非推薦」になっているので、これはそのうち消える、ですよね……。
そこで、悩まずに突っ込んでいっても、勝手にキャストオーバーロードしてくれるクラスを投入しておきました。また、Bitcoinのコア処理に必須なCDataStreamについても、正常に作用しました。その他、セキュア関連を標準で入れていきます。
https://github.com/FromHDDtoSSD/SorachanCoin-qt/blob/master/src/libstr/cmstring.cpp