将char *数字转换为int32_t的正确方法

我想从char *格式转换为32位整数int32_t,但strtol()返回长。

我不知道我的机器上的长度。 它可能是32位或64位或未来的其他东西。

将string转换为32位整型int32_t的正确和防弹方法是什么? 或者把long转换为int32_t。

是比较_MAX和_MIN常数的唯一和最简单的方法?

sscanf<inttypes.h>一个格式说明符宏一起使用,例如SCNd32SCNi32

 int32_t i; sscanf(str, "%"SCNd32, &i); 

这些都是自C99以来。

 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. } ...