我正在寻找标准函数将字符串转换为
stdint.h整数,如
int i = atoi("123"); unsigned long ul = strtoul("123",NULL,10); uint32_t n = mysteryfunction("123"); // <-- ???
解决方法
有两个常规选项:strto [iu] max,然后检查值是否适合较小的类型,或切换到sscanf. C标准在< inttypes.h>中定义了整个宏系列.扩展到< stdint.h>的适当转换说明符类型. uint32_t的示例:
#include <inttypes.h> #include <stdio.h> int main() { uint32_t n; sscanf("123","%"SCNu32,&n); printf("%"PRIu32"\n",n); return 0; }
(在uint32_t的情况下,strtoul溢出检查也适用于uint32_t,因为unsigned long至少为32位宽.对于uint_least32_t,uint_fast32_t,uint64_t等,它不会可靠地工作)
编辑:正如Jens Gustedt在下面所说,这并不能提供strtoul的完全灵活性,因为你无法指定基础.但是,仍然可以分别用SCNo32和SCNx32获得基数8和基数16.