如何解析glib字符串中的整数(gchar *)?

时间:2009-10-25 22:22:41

标签: c string glib atoi

我有一个包含整数值(的数字)的字符串,我希望将此值作为int获取。我知道还有其他方法可以做到这一点,例如atoi();但是,我真的很想用glib来做这件事。这样的解析/转换功能是否存在?

2 个答案:

答案 0 :(得分:10)

GLib为标准C库提供了大量的输入安全检查,并在可行的情况下进行了增强。

您正在寻找的功能是g_ascii_strtoll()

迂腐的附录

atoi()以与strtolg_ascii_strtoll()相同的方式处理语言环境。仔细阅读联机帮助页和Glib文档将揭示这一点。以下是一些不能RTFM

的代码段

atoi()

atoi()函数将nptr指向的字符串的初始部分转换为int。行为与strtol(nptr, (char **) NULL, 10);相同,只是atoi()没有检测到错误。

strtol()

在“C”语言环境以外的语言环境中,也可以接受其他字符串。 (例如,可能支持当前区域设置的千位分隔符。)

g_ascii_strtoll()

将字符串转换为gint64值。此函数的行为类似于标准的strtoll()函数在C语言环境中的作用。它在没有实际更改当前语言环境的情况下执行此操作,因为这不是线程安全的。

更改区域设置

如果这不是sans-locale,你可以通过环境变量设置语言环境,和/或显式调用setlocale()

答案 1 :(得分:4)

GLib是一个通用库,为开发应用程序提供了一个共同的基础。这并不意味着GLib重新实现了所有标准C库,而是在所有支持的平台上抽象出任何不可用(或不一致)的内容。

因此,简而言之,您必须使用标准atoi()函数:GLib仅实现gdoublegint64变体。