用atoi来将字符串转换为int类型。
例如atoi("12345")返回整数12345。
当期望转换的类型是uint32_t的时候,有些兄弟可能会这么写:(uint32_t)atoi("3000000000"),这在64位机器上运行是正确的,返回整数30亿;但是当迁移到32位机器上时,就出错了,只能返回2147483647,即0x7FFFFFFF。
这是因为atoi内部使用了strtol 函数来实现,而strtol返回long,在64位机器上long是8byte长,覆盖到了int和uint32_t的所有值;而在32位机器上,long跟int的取值域是等同的,超过int取值域字符串就只能取到边界值了。
所以说,用atoi来转换uint32_t类型的时候,代码其实是有风险的,甚至是不正确的,建议用atoll、strtoul、或者sscanf("3000000000", "%u", &uint32)这样的方法来转换。
本文发布于:2024-01-28 11:14:24,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17064116707025.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |