glib文字列(gchar *)の整数を解析する方法は?
質問
整数値(の数字)を含む文字列があり、この値をintとして取得したい。 atoi()
など、これを行う他の方法があることを認識しています。ただし、これを行うにはglibを使用します。そのような解析/変換関数は存在しますか?
解決
GLibは、標準Cライブラリの多くに入力の安全性チェックと実用的な機能強化を提供します。
探している関数は g_ascii_strtoll()
。
足踏み補遺
atoi()
は、ロケールを strtol
AND g_ascii_strtoll()
と同じように扱います。マンページとGlibドキュメントを非常に注意深く読むと、これが明らかになります。以下は、 RTFM を作成できないスニペットです。
atoi()関数は、nptrが指す文字列の初期部分をintに変換します。動作は、 strtol(nptr、(char **)NULL、10);
と同じですが、atoi()はエラーを検出しません。
" C"以外のロケールロケール、他の文字列も受け入れられます。 (たとえば、現在のロケールの千単位の区切り文字がサポートされる場合があります。)
文字列をgint64値に変換します。この関数は、Cロケールで標準のstrtoll()関数が行うように動作します。スレッドセーフではないため、現在のロケールを実際に変更せずにこれを行います。
ロケールの変更
これが十分にsans-localeでない場合は、環境変数を使用してロケールを設定したり、 setlocale()
他のヒント
GLibは、アプリケーションを開発するための共通ベースを提供する汎用ライブラリです。これは、GLibがすべての標準Cライブラリを再実装することを意味するのではなく、サポートされているすべてのプラットフォームで利用できない(または一貫性のない)ものを抽象化します。
つまり、要するに、標準の atoi()
関数を使用する必要があります。GLibは gdouble
と gint64
のバリアントのみを実装します。