2009-10-25 5 views
2

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

+0

В каком контексте? –

+0

Вы хотите преобразовать строку в int или указатель на int? – ntd

+0

Я имею в виду преобразование строки в int. – Jordan

ответ

9

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

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

Педантичного Добавление

atoi() лечит локали так же, как strtol И g_ascii_strtoll(). Это будет очень тщательное прочтение материалов и документации Glib. Вот некоторые фрагменты для тех, кто не может RTFM:

atoi()

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

strtol()

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

g_ascii_strtoll()

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

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

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

+2

На самом деле это неправильный ответ. g_ascii_strtoll() не является улучшением atoi() или strtoll(), это независимая от языка версия. Документы g_ascii_strtoll() говорят: «Для обработки ввода от пользователя вы обычно должны использовать функцию strtoll(), чувствительную к языковой настройке». Ответ ntd был верным, просто используйте atoi(), чтобы преобразовать строку в int. Это не функция GLib, но все в порядке. – ptomato

+0

эй, он не упоминает требования к языку, и если локаль не является проблемой, по умолчанию будет просто отлично. :) –

+0

Вот в чем дело, вы никогда не знаете, когда проблема будет в локали. Я не знаю точно, как функция отличается от локали к локали, но я могу себе представить, что, скажем, в корейском языке, она вообще не может преобразовывать арабские цифры ... – ptomato

4

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

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