C/C++のc32rtomb()関数とは?32ビット文字をマルチバイト文字列へ変換する方法
C++では、UTF-32などの32ビット文字表現を扱うことができます。c32rtomb()関数は、このような32ビットの文字(char32_t)を、ナローマルチバイト文字表現へ変換するための関数です。この関数は<uchar.h>ヘッダーファイルで定義されており、C++11以降で利用可能です。
c32rtomb()関数の基本構文
size_t c32rtomb(char* s, char32_t c32, mbstate_t* ps);
パラメータについて
この関数は、以下の3つの引数を受け取ります。
- 変換結果の格納先:マルチバイト文字が書き込まれる文字配列へのポインタ
- 変換対象の文字:char32_t型の32ビット文字
- 状態オブジェクト:マルチバイト文字列の解釈状態を保持するmbstate_t型オブジェクトへのポインタ
戻り値
変換が成功した場合、この関数は文字配列に書き込まれたバイト数を返します。一方、無効な文字が渡されたなどの理由で変換に失敗した場合は、-1を返し、errnoにEILSEQが設定されます。
使用例
それでは、実際のコード例を見て、動作を確認してみましょう。
#include <iostream>
#include <uchar.h>
#include <wchar.h>
using namespace std;
int main() {
const char32_t myStr[] = U"Hello World";
char dest[50];
mbstate_t p{};
size_t length;
int j = 0;
while (myStr[j]) {
length = c32rtomb(dest, myStr[j], &p); //c32rtomb()から長さを取得
if ((length == 0) || (length > 50))
break;
for (int i = 0; i < length; ++i)
cout << dest[i];
j++;
}
}
実行結果
Hello World
コードの解説
このプログラムでは、まずUTF-32リテラル(U"Hello World")として文字列を定義しています。その後、whileループを使って1文字ずつ取り出し、c32rtomb()関数でマルチバイト文字に変換しています。
変換結果のバイト数が0またはバッファサイズ(50)を超えた場合はループを抜けます。正常に変換できた場合は、書き込まれたバイト分だけ標準出力へ表示していきます。最終的に、元の文字列「Hello World」が正しく出力されていることがわかります。
なお、日本語などのマルチバイト文字を扱う場合も同様の手順で変換できますが、ロケール設定によって結果が変わる点には注意が必要です。
-
C/C++のmbsrtowcs()関数とは?構文・パラメータ・戻り値と実例を解説
本記事では、C++ STLに含まれるstd::mbsrtowcs()関数の仕組み、構文、および具体的な使用例について詳しく解説します。 std::mbsrtowcs()とは? std::mbsrtowcs()は、C++ STLに組み込まれている関数で、<cwchar>ヘッダーファイル内で定義されています。関数名のmbsrtowcs()は「multibyte string to wide character string(マルチバイト文字列からワイド文字列への変換)」を意味し、再開可能な変換状態を維持しながら、NULL終端されたマルチバイト文字列をワイド文字列表現へと変換します。この
-
C/C++のsystem()関数とは?使い方と実行例を徹底解説
この記事では、C/C++におけるsystem()関数の基本的な使い方と動作について、具体例を交えながら詳しく解説します。 system()関数は、C/C++標準ライブラリに含まれる関数の一つです。オペレーティングシステムのコマンドプロセッサ(コマンドプロンプト)やターミナルで実行可能なコマンドをプログラムから渡して実行でき、コマンドの処理が完了すると制御をプログラムに戻します。 この関数を使用するには、ヘッダーファイル<stdlib.h>(C++の場合は<cstdlib>)をインクルードする必要があります。 構文 system()関数の構文は以下の通りです。 int