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,就将不会出现上面的问题。 下面我将把我们常用的转换函数贴出来: