c – 对于uint32_t和其他stdint类型,atoi或strtoul相当于什么?

前端之家收集整理的这篇文章主要介绍了c – 对于uint32_t和其他stdint类型,atoi或strtoul相当于什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在寻找标准函数将字符串转换为 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.

原文链接:https://www.f2er.com/c/111224.html

猜你在找的C&C++相关文章