大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

C++でC風ライブラリを作る(UTF-16またはUTF-32からUTF-8への変換編2)

著者:高木信尚
公開日:2019/04/21
最終更新日:2019/04/21
カテゴリー:技術情報

高木です。おはようございます。

最近は本当に当サイトのブログが活気づいています。
前回の投稿は探さないと見つからなくなってしまいました。
ブログが活気づくのはいいことなので、うれしい悲鳴といったところでしょうか。

昨年4月の状況を振り返ると、1ヶ月間で105件もの投稿がありました。
おそらく「君ブロ」が佳境を迎えていたからだと思います。
それに比べれば今月の状況はまだおとなしいぐらいです。

余談はこれぐらいにして、本題に入りましょう。

今取り組んでいるUTF-16またはUTF-32からUTF-8への変換編は、かれこれ1ヶ月ほどかけて連載しています。
この辺りでそろそろ完結させたいですね。

今まではchar16_t型またはchar32_t型の値からUTF-8の多バイト文字列に変換するというものでした。
実際のコードではwchar_t型を使うこともあると思いますので、まずはctrtomb関数をwchar_t型に対応させることにしましょう。
あまりクソ真面目な対応はやめ、wchar_t型はchar16_t型またはchar32_t型のどちらかと同じサイズ、同じ内部表現であると仮定することにします。

これでctrtomb関数は一応の完成をみました。
次は、後回しにしていたcttomb関数の実装を再開することにしましょう。
以前作ったものはいったん捨て、ctrtomb関数を使って再実装することにします。

これでcttomb関数も完成です。
厳密なことをいうと、std::size_t型からint型への変換はオーバーフローを発生させるのでよくありません。
ただ、現実の処理系ではまず問題になることはないので、こういう簡易な実装を行いました。

まだまだブラッシュアップの余地はあるのですが、いったんはこの辺りで締めたいと思います。
次回からは、今回の逆、すなわちUTF-8からUTF-16やUTF-32への変換を扱いたいと考えています。

    前の記事 :
    上に戻る