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

  • 相关阅读:
    Java finally语句到底是在return之前还是之后执行?
    RedirectAttributes
    ueditor的使用
    controller跳到另一个controller
    $.post()用法例子
    进入一个jsp直接跳到另一个jsp
    mybatis多表查询
    asp.net在网页上显示数据库中的数据
    asp.net全局记住值
    面向对象
  • 原文地址:https://www.cnblogs.com/fyp7077/p/8400474.html
Copyright © 2011-2022 走看看