我正在寻找将字符串转换为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_tuint_fast32_tuint64_t等。)

编辑:正如Jens Gustedt在下面指出的那样,这不能提供strtoul的全部灵活性,因为您无法指定基数。但是,仍然可以分别使用SCNo32SCNx32获得base 8和base 16。

关于c - uint32_t和其他stdint类型的atoi或strtoul等价于什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5745352/

10-12 18:04