代码之家  ›  专栏  ›  技术社区  ›  tur1ng

将字符串转换为整数-每个表示形式

  •  1
  • tur1ng  · 技术社区  · 15 年前

    是否有可转换的函数或库 任何 (默认值,八进制,十六进制,…)C中的整数,作为 char[] 变成一个 unsigned long long int ?

    实例:

    1
    1l
    1ul
    42e+10
    0x2aLL
    01234u
    ...
    

    atoi 有一些关于0x的问题…以及后缀U/L。

    2 回复  |  直到 15 年前
        1
  •  4
  •   Jerry Coffin    15 年前

    strtoull 离得越近越好。这将在后缀处停止,但由于 unsigned long long 你也不在乎后缀。我不相信它能和 42e+10 或者,尽管生成的值是整数,但是C和C++只定义浮点数的“E”符号。

    除此之外,你需要/想要通过 0 作为转换基础,在这种情况下,它实现了通常的C约定,即 八进制信号 0x 十六进制信号,以及 1-9 十进制信号。

        2
  •  1
  •   Patrick    15 年前

    您可以使用sscanf并检查返回值,看看它是否有用,例如:

    bool parseValue (const char *buffer, long &value)
    {
    if (sscanf(buffer,"%ld",&value)==1) return true;
    if (sscanf(buffer,"0x%lx",&value)==1) return true;
    ...
    return false;
    }
    

    您可以轻松地向此列表添加更多类型的格式。 要对浮点值进行扩展,请扫描浮点值中的缓冲区,然后将其强制转换或舍入为整数值,如下所示:

    bool parseValue (const char *buffer, long &value)
    {
    if (sscanf(buffer,"%ld",&value)==1) return true;
    if (sscanf(buffer,"0x%lx",&value)==1) return true;
    ...
    double d;
    if (sscanf(buffer,"%lf",&d)==1) {value=d; return true;}
    ...
    return false;
    }