strtoul()要优于atoi()函数---C语言

strtoul():将字符串转为长整型整数

atoi():将字符串转为整型整数

在32位STM32中,int是32位的,如果字符串是“3123456789”,大于0x7fff fff,用atoi()函数返回的值就是0x7fff fff,而使用strtoul就能返回正确的值。

http://blog.163.com/xychenbaihu@yeah/blog/static/1322296552011631111739570/

但是,下面介绍一个非常常见的问题,它会害死人的:

unsigned int  value = 0;

value = (unsigned)atoi("3000000000");

printf("value = %u",value);

/*

          在64位机器下,value=3000000000。然而在32位机器下value=2147483647

*/

             这是因为atoi函数内部还是使用strtol实现的,那么,在atoi内部首先是strtol将"3000000000"转换成long类型,

然而,

           在64位机器下,long是8字节的,最高字节是符号位,数据位是7位。

           而在32位机器下,long是4字节的,即和int类型是一样的,最高字节也是符号位,数据位也是3位。所以在strtol已经将"3000000000"转换时截断为2147483647。

  

如果我们使用strtoul,就将不会出现上面的问题。

 

下面我将把我们常用的转换函数贴出来:

原文地址:https://www.cnblogs.com/fyp7077/p/8400474.html