Как разобрать целое число в строке glib (gchar *)? - PullRequest
4 голосов
/ 26 октября 2009

У меня есть строка, которая содержит (цифры) целочисленное значение, и я хочу получить это значение в виде целого числа. Я знаю, что есть другие способы сделать это, такие как atoi(); однако, я действительно хотел бы использовать glib для этого. Существует ли такая функция синтаксического анализа / преобразования?

Ответы [ 2 ]

11 голосов
/ 26 октября 2009

GLib предоставляет большую часть стандартной библиотеки C с проверками безопасности для ввода и усовершенствованиями, где это возможно.

Функция, которую вы ищете: g_ascii_strtoll().

педантичное приложение

atoi() обрабатывает локаль так же, как strtol AND g_ascii_strtoll(). Очень внимательное прочтение man-страниц и документации Glib покажет это. Вот некоторые фрагменты для тех, кто не может RTFM :

atoi()

Функция atoi () преобразует начальную часть строки, на которую указывает nptr, в int. Поведение такое же, как у strtol(nptr, (char **) NULL, 10);, за исключением того, что atoi () не обнаруживает ошибки.

strtol()

В локалях, отличных от локали "C", могут быть также приняты другие строки. (Например, разделитель тысяч текущей локали может поддерживаться.)

g_ascii_strtoll()

Преобразует строку в значение gint64. Эта функция ведет себя так же, как стандартная функция strtoll () в языке Си. Он делает это без фактического изменения текущей локали, поскольку это не будет потокобезопасным.

Изменение локали

Если этого недостаточно для локализации, вы можете установить локаль через переменные среды и / или явные вызовы setlocale()

4 голосов
/ 26 октября 2009

GLib - это библиотека общего назначения, которая обеспечивает общую основу для разработки приложений. Это не означает, что GLib переопределяет всю стандартную библиотеку C, но вместо этого абстрагирует то, что не доступно (или не согласовано) на всех поддерживаемых платформах.

Итак, вкратце, вы должны использовать стандартную функцию atoi(): GLib реализует только варианты gdouble и gint64.

...