函数解析Linux atoi函数的秘密(linuxatoi)

Linux atoi函数是一种常见的C/C++内置函数,它可以解析字符串并把它们转换为整型数字。它的 API 风格(应用程序编程接口)主要包括:

int atoi(const char * str);

我们可以通过上面的 API 把一个字符串转换成整数。然而,正如我们所知,atoi() 内部实现的秘密是什么?

要了解 atoi() 函数的实现,我们可以看 Linux 核心源码,这是一种 C 函数,它可以在核心代码库中找到:

// atoi 函数定义

int atoi(const char * str)

{

int v;

char *endptr ;

// 初始化

v=strtol( str, &endptr, 10);

// 检查失败

if( (errno == ERANGE && (v == LONG_MAX || v == LONG_MIN))

   || (errno !=0 && v ==0) ) {

errno = EINVAL;

return 0;

}

if(endptr == str)

return 0;

// 成功,返回 v 的值

return v;

}

atoi() 函数的内部实现完全得益于 strtol() 函数,它是一个受信任的库函数,可以安全的把字符串转换成 LONG 类型的数字,假定字符串可以有效的表达数字。另外, strtol() 函数可以转换任何整型字符串,例如 16 进制和 8 进制,而 atoi() 只能处理 10 进制。

总而言之,atoi() 函数底层实现的秘密就是 strtol() 函数,它可以安全的将字符串转换成 LONG 类型的数字,假定字符串可以有效的表达数字。这个函数的参数还可以指定字符串的基数,例如 8 进制和 10 进制。最后,将转换后的数字返回给 atoi() 函数,并将其作为整数返回给程序。


数据运维技术 » 函数解析Linux atoi函数的秘密(linuxatoi)