C/C++のwcstoll()関数とは?ワイド文字列をlong long整数に変換する方法を徹底解説
wcstoll()関数とは
wcstoll()関数は、ワイド文字列(wchar_t型)をlong long型の整数に変換するための標準ライブラリ関数です。変換できなかった最初の文字以降の位置をポインタに格納する機能も備えており、文字列解析に非常に便利です。構文は以下の通りです。
long long wcstoll(const wchar_t* str, wchar_t** str_end, int base)
引数
この関数は3つの引数を受け取ります。
- str: 変換対象となるワイド文字列の先頭へのポインタです。
- str_end: 関数によって設定される出力用ポインタです。最後に読み取った有効な文字の次の文字を指します。残りの文字がない場合はNULLが設定されます。
- base: 数値の基数(進数)を指定します。指定できる値は0、2、3、…、35、36です。
戻り値
変換されたlong long型の整数値を返します。変換対象の文字列がNULLの場合は0を返します。
使用例1:基数10(10進数)の場合
まずは最も一般的な10進数(base = 10)での変換例を見てみましょう。
#include <iostream>
using namespace std;
main() {
// ワイド文字列を2つ定義
wchar_t string1[] = L"777HelloWorld";
wchar_t string2[] = L"565Hello";
wchar_t* End; // 終端ポインタ
int base = 10;
int value;
value = wcstoll(string1, &End, base);
wcout << "The string Value = " << string1 << "\n";
wcout << "Long Long Int value = " << value << "\n";
wcout << "End String = " << End << "\n"; // 整数部分より後の残りの文字列
value = wcstoll(string2, &End, base);
wcout << "\nThe string Value = " << string2 << "\n";
wcout << "Long Long Int value = " << value << "\n";
wcout << "End String = " << End; // 整数部分より後の残りの文字列
}
実行結果
The string Value = 777HelloWorld
Long Long Int value = 777
End String = HelloWorld
The string Value = 565Hello
Long Long Int value = 565
End String = Hello
この例では、文字列「777HelloWorld」から数値部分「777」だけが抽出され、long long整数として返されています。また、str_endには数値の直後にある「HelloWorld」の先頭アドレスが格納されるため、数値以外の残りの文字列も簡単に取得できます。
使用例2:基数16(16進数)の場合
次に、基数を16(16進数)に変更した例を見てみましょう。16進数として解釈できる文字列は、10進数の形式で出力されます。
#include <iostream>
using namespace std;
main() {
// ワイド文字列を2つ定義
wchar_t string1[] = L"5EHelloWorld";
wchar_t string2[] = L"125Hello";
wchar_t* End; // 終端ポインタ
int base = 16;
int value;
value = wcstoll(string1, &End, base);
wcout << "The string Value = " << string1 << "\n";
wcout << "Long Long Int value = " << value << "\n";
wcout << "End String = " << End << "\n"; // 整数部分より後の残りの文字列
value = wcstoll(string2, &End, base);
wcout << "\nThe string Value = " << string2 << "\n";
wcout << "Long Long Int value = " << value << "\n";
wcout << "End String = " << End; // 整数部分より後の残りの文字列
}
実行結果
The string Value = 5EHelloWorld
Long Long Int value = 94
End String = HelloWorld
The string Value = 125Hello
Long Long Int value = 293
End String = Hello
1つ目の文字列は「5E」を含んでいます。これを16進数として解釈すると、10進数では94になります。同様に、2つ目の文字列「125」は16進数では10進数の293に相当します。このように、base引数を変更するだけで、同じ関数を使ってさまざまな進数の文字列を整数に変換できます。
まとめ
wcstoll()関数は、ワイド文字列をlong long型の整数に変換する際に役立つ関数です。第2引数のstr_endを利用すれば、数値部分とそれ以外の部分を簡単に分離できます。さらに、base引数で基数を指定できるため、2進数から36進数まで柔軟に対応可能です。文字列のパース処理や入力データの解析を行うプログラムで、ぜひ活用してみてください。
-
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