4

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

4

2 回答 2

11

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

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

迂腐的附录

atoi()strtol以与 AND相同的方式处理语言环境g_ascii_strtoll()。仔细阅读手册页和 Glib 文档会发现这一点。以下是一些无法使用RTFM的片段:

atoi()

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

strtol()

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

g_ascii_strtoll()

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

更改语言环境

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

于 2009-10-26T10:10:35.643 回答
4

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

所以,简而言之,你必须使用标准atoi()函数:GLib 只实现了gdoublegint64变体。

于 2009-10-25T22:41:46.240 回答