注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

长风明志的博客

不要也不能做下一个谁,应该且可以做第一个自己

 
 
 

日志

 
 

【转载】字符串转换成数字,atoi、atol、atoll(都是带符号的类型)和strtol、strtoll(都是带符号的类型)和strtoul、strtoull(都是不带符号的类型)  

2014-03-10 13:01:43|  分类: C/C++编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

将程序的实现中,我们经常会遇到将将字符串转换成数字的问题:

经常我们会用到atoi,atol,atoll。那无符号怎么办呢?下面的问题很严重。

所以无符号最好使用strtoul和strtoull等。

 

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

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,就将不会出现上面的问题。

 

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

               

字符串转换成数字,atoi、atol、atoll(都是带符号的类型)和strtol、strtoll(都是带符号的类型)和strtoul、strtoull(都是不带符号的类型) - 无影 - 激情、专注、坚持、思考

字符串转换成数字,atoi、atol、atoll(都是带符号的类型)和strtol、strtoll(都是带符号的类型)和strtoul、strtoull(都是不带符号的类型) - 无影 - 激情、专注、坚持、思考

字符串转换成数字,atoi、atol、atoll(都是带符号的类型)和strtol、strtoll(都是带符号的类型)和strtoul、strtoull(都是不带符号的类型) - 无影 - 激情、专注、坚持、思考

  评论这张
 
阅读(512)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017