【问题标题】:Right way to convert char * number to int32_t将 char * number 转换为 int32_t 的正确方法
【发布时间】:2011-12-31 07:43:39
【问题描述】:

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

我不知道我机器上的 long 长度。将来可能是 32 位或 64 位或其他版本。

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

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

【问题讨论】:

  • sprintf("%i", ...) 有什么问题?它不会自动正确处理 32/64 位系统吗?
  • 多项式,问题是 %i 不对应 int32_t。总之,正确答案如下。

标签: c linux type-conversion


【解决方案1】:

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

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

这些从 C99 开始可用。

【讨论】:

【解决方案2】:
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.
}
...

【讨论】:

    猜你喜欢
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 2011-12-14
    • 1970-01-01
    • 2012-10-01
    相关资源
    最近更新 更多