atoi函数不同平台的实现问题

原创 2006年06月04日 18:08:00

atoi函数不同平台的实现问题

    工程中要通过文件得到数值,想当然的就使用了atoi这个函数。在
Windows下使用,没什么问题。但是一移植到Linux下,问题就出来了,
发现得到的数总是不对劲。用gdb跟踪一下,发现大于2147483647的数
均返回2147483647这个值。又在Windows下debug了一下,发现得到的数
值正常,能够得到大于2147483647的数。
    这就比较有趣了,2147483647十六进制表示是0x7FFFFFFF。应该是
越界问题。查了一些资料,发现gcc在实现atoi函数的时候,如果输入
的字符串数值大于int型最大值将返回INT_MAX(2147483647)这个值。
    又在Windows下,使用VS.net2003测试了一下,发现数值在2^31~
2^32-1之间,返回正常的数,而大于2^32-1将返回模2^32的数。
    VS.net2003内部实现atoi函数使用了取模操作,以2^32为模。而
gcc使用了截断操作,以2^31-1为界,超过同一返回2^31-1。
    因此,使用atoi函数就需要小心些。而且atol函数跟atoi函数一
样,测试结果一样。
    为了支持得到超过2^31-1的数,在Linux下就必须使用strtoul这
个函数。
    unsigned long strtoul(
       const char *nptr,
       char **endptr,
       int base
    );
    这个函数功能比atoi强大的多,第一个参数是需要转换的字符串,
第二个参数是扫描结束时指向的位置,从而可以用来获知有没有转换
溢出,第三个参数是进制,支持2~64之间任意一个。这样就可以知道
转换了多少个字符。

PS:
    又用VS.net2005测试过,发现atoi返回的结果已经跟Linux一致了,
即大于INT_MAX时,返回INT_MAX。

 

atoi函数实现

  • 2013年08月24日 21:55
  • 484B
  • 下载

自己实现的atoi函数

  • 2012年03月27日 19:47
  • 362KB
  • 下载

atoi和itoa函数及负数转正数时溢出问题

首先贴出c函数库里的atoi函数, 其实是atol函数, 因为atoi调用了atol函数. 函数很简单,相信大家一看就懂. isspace函数是判断传入字符是否为空白符, 空白符指空格, 水平制表,...

c++实现atoi()和itoa()函数(字符串和整数转化)

一:起因 (1)字符串类型转化为整数型(Integer),还是字符串类型(String)转化为Double类型,这在java里面有非常好的内部函数,很easy的事情; (2)但是在c里面没有Integ...

atoi函数实现的各种考虑因素

#define _CRT_SECURE_NO_WARNINGS 1 #include //atoi实现:将一个字符串转换为对应的整数 enum Status //定义两个枚举常量判断所给变量是...

c函数itoa和atoi实现

1、itoa函数实现 [cpp] view plaincopy #include       void itoa(int i, char *st...
  • zhubosa
  • zhubosa
  • 2016年01月11日 12:28
  • 240

【面试题】剑指Offer-49-模拟实现atoi()函数

题目概述 解题思路 就像本篇博文的题目所介绍的那样 这道题目就是让模拟实现atoi函数 结合库中的atoi函数,我们需要处理的情况有以下几种 各种情况分析 情况1:正常情况,给的字...

C/C++ 实现 atoi 函数

将一段字符串转换为整数数字,最基本的方法就是使用 atoi 函数。如果让我们自己实现一段 atoi 函数,需要注意的细节比较多。原始版本首先想到的就是字符类型之间的差值。可以直接使用字符相减得到差值。...

C 标准库 atoi 函数的实现

/* * atoi 是一个解析字符串的一个函数 * 可以将字符串解析为 int 类型 * 解决如下的问题: * 1 空白符 * 2 正号和负号 * 3 进制 * 4 溢出...

尝试实现 atoi和atof函数

手动实现atoi以及atof的功能及思路
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:atoi函数不同平台的实现问题
举报原因:
原因补充:

(最多只允许输入30个字)