我正在寻找将字符串转换为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
获得base 8和base 16。关于c - uint32_t和其他stdint类型的atoi或strtoul等价于什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5745352/