Comment analyser un entier dans une chaîne glib (gchar *)?
Question
J'ai une chaîne qui contient (les chiffres de) une valeur entière et je veux obtenir cette valeur en tant qu'int. Je suis conscient qu'il existe d'autres méthodes pour cela, telles que atoi ()
; Cependant, j'aimerais vraiment utiliser glib pour faire cela. Une telle fonction d’analyse / conversion existe-t-elle?
La solution
GLib fournit une grande partie de la bibliothèque C standard avec des contrôles de sécurité pour les entrées et des améliorations lorsque cela est possible.
La fonction recherchée est g_ascii_strtoll ()
.
Addenda Pedantic
atoi ()
traite les paramètres régionaux de la même manière que strtol
AND g_ascii_strtoll ()
. Une lecture très attentive des pages de manuel et de la documentation Glib le révélera. Voici quelques extraits pour ceux qui ne peuvent pas RTFM :
La fonction atoi () convertit la partie initiale de la chaîne pointée par nptr en int. Le comportement est le même que strtol (nptr, (char **) NULL, 10);
sauf que atoi () ne détecte pas les erreurs.
Dans les paramètres régionaux autres que le "C" locale, d'autres chaînes peuvent également être acceptées. (Par exemple, le séparateur de milliers de l'environnement local actuel peut être pris en charge.)
Convertit une chaîne en une valeur gint64. Cette fonction se comporte comme la fonction standard strtoll () dans les paramètres régionaux C. Cela se fait sans changer réellement les paramètres régionaux en cours, car cela ne serait pas thread-safe.
Changer les paramètres régionaux
Si cela ne suffit pas, vous pouvez définir les paramètres régionaux à l'aide de variables d'environnement et / ou d'appels explicites à setlocale ()
Autres conseils
GLib est une bibliothèque à usage général qui fournit une base commune pour développer des applications. Cela ne signifie pas que GLib réimplémente toute la bibliothèque C standard, mais qu'elle résume tout ce qui n'est pas disponible (ou pas cohérent) sur toutes les plateformes prises en charge.
Donc, en bref, vous devez utiliser la fonction standard atoi ()
: GLib implémente uniquement les variantes gdouble
et gint64
.