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

时间:2010-01-28 16:27:24

标签: c integer

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

示例:

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

atoi在0x ...和后缀u / l。

方面存在一些问题

2 个答案:

答案 0 :(得分:4)

strtoull近在咫尺。这将停留在后缀,但由于你总是生成unsigned long long,所以你并不关心后缀。我不相信它也适用于42e+10 - 尽管产生的值是整数,C和C ++只定义浮点数的'e'表示法。

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

答案 1 :(得分:1)

您可以使用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;
}