是否有一个函数或库可以将作为char[]
的C中的任何(默认,八进制,十六进制......)整数转换为unsigned long long int
?
示例:
1
1l
1ul
42e+10
0x2aLL
01234u
...
atoi
在0x ...和后缀u / l。
答案 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;
}