我想将数字从char *格式转换为32位整数int32_t,但strtol()返回long。
我不知道我机器上的长度。它可能是32或64位或将来的其他东西。
将字符串转换为32位整数int32_t的正确和防弹方法是什么?或者将long转换为int32_t。
与_MAX和_MIN常量的比较是唯一且最简单的方法吗?
答案 0 :(得分:10)
将sscanf
与<inttypes.h>
中的一个格式说明符宏一起使用,例如SCNd32
或SCNi32
:
int32_t i;
sscanf(str, "%"SCNd32, &i);
自C99以来可以使用。
答案 1 :(得分:0)
char *buf;
long val;
....
if (1 == sscanf(buf, "%ld", &val) )
{
// success!
// now we have the data in a long, can do some boundary checking and then put it in an int32_t.
}
...