Chr*_*eur 6 c c99 type-conversion stdint
我正在寻找将字符串转换为stdint.h整数的标准函数
int i = atoi("123");
unsigned long ul = strtoul("123", NULL, 10);
uint32_t n = mysteryfunction("123"); // <-- ???
Run Code Online (Sandbox Code Playgroud)
有两个常规选项: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;
}
Run Code Online (Sandbox Code Playgroud)
(在的情况下uint32_t,strtoul+溢检查也将工作uint32_t,因为unsigned long是宽至少32位.这将不能可靠地对工作uint_least32_t,uint_fast32_t,uint64_t等等)
编辑:正如Jens Gustedt在下面所说,这并没有提供完全的灵活性,strtoul因为你无法指定基础.但是,基座8和基座16仍然可以分别用SCNo32和获得SCNx32.
| 归档时间: |
|
| 查看次数: |
6385 次 |
| 最近记录: |