我想将数字从char *格式转换为32位整数int32_t,但是strtol()返回long.
我不知道我的机器上的长度。它可以是32位或64位,或者将来是其他的。
将字符串转换为32位整数int32_t的正确和防弹方法是什么?或者将long转换为int32_t。
比较_MAX和_MIN常数是唯一和最简单的方法吗?
使用sscanf
与<inttypes.h>
的格式说明符宏之一,例如SCNd32
或SCNi32
:
int32_t i;
sscanf(str, "%"SCNd32, &i);
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.
}
...