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

时间:2011-11-17 12:41:44

标签: c linux type-conversion

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

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

将字符串转换为32位整数int32_t的正确和防弹方法是什么?或者将long转换为int32_t。

与_MAX和_MIN常量的比较是唯一且最简单的方法吗?

2 个答案:

答案 0 :(得分:10)

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

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