C语言字符串转无符号int,字符串转有符号int

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

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

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

经常我们会用到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(都是不带符号的类型) - 无影 - 激情、专注、坚持、思考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值