Como analisar um número inteiro em uma string glib (gchar *)?
Pergunta
Eu tenho uma string que contém (os dígitos de) um valor inteiro, e eu quero obter esse valor como um int. Estou ciente de que existem outros métodos para fazer isso, como atoi()
; No entanto, eu realmente gosto de usar glib para fazer isso. Funciona como uma análise / conversão existe?
Solução
GLib fornece grande parte da biblioteca padrão C com verificações de segurança para entrada e melhorias sempre que possível.
A função que você está procurando g_ascii_strtoll()
.
pedante adendo
atoi()
trata localidade da mesma forma que strtol
E g_ascii_strtoll()
. Uma leitura muito cuidadosa das manpages e documentação Glib vai revelar isso. Aqui estão alguns trechos para aqueles que não podem RTFM :
O atoi () converte função da porção inicial da string apontada por nptr para int. O comportamento é o mesmo que strtol(nptr, (char **) NULL, 10);
exceto que atoi () não detectar erros.
em locais que não seja a localidade "C", outras cordas também podem ser aceitos. (Por exemplo, o separador de milhares da localidade atual pode ser suportado.)
Converte uma string para um valor gint64. Esta função comporta-se como a função strtoll padrão () faz no local C. Ele faz isso sem alterar o local atual, uma vez que não seria thread-safe.
Alterar locale
Se isto não é sans-locale suficiente, você pode definir a localidade através de variáveis ??de ambiente, e / ou chamadas explícitas para setlocale()
Outras dicas
GLib é uma biblioteca de propósito geral que fornece uma base comum para desenvolver aplicativos. Isso não significa GLib reimplementa toda a biblioteca C padrão, mas em vez resumos tudo o que não está disponível (ou não consistente) em todas as plataformas suportadas.
Então, em suma, você deve usar a função atoi()
padrão:. GLib implementos apenas o gdouble
e gint64
variantes