C 将字符串转换为整数-每个表示形式
是否有一个函数或库可以转换任何默认值,八进制,十六进制。。。C中的整数以char[]的形式表示为无符号长整型 示例:C 将字符串转换为整数-每个表示形式,c,integer,C,Integer,是否有一个函数或库可以转换任何默认值,八进制,十六进制。。。C中的整数以char[]的形式表示为无符号长整型 示例: 1 1l 1ul 42e+10 0x2aLL 01234u ... atoi在0x方面有一些问题。。。后缀u/l.strtoull是最接近的。这将在后缀处停止,但由于您总是生成一个无符号的long-long,因此您并不真正关心后缀。我不相信它也能用42E + 10来工作——尽管产生的值是整数,C和C++只定义浮点数的E’符号。 除此之外,您需要/希望传递0作为转换基数,在这种情
1
1l
1ul
42e+10
0x2aLL
01234u
...
atoi在0x方面有一些问题。。。后缀u/l.strtoull是最接近的。这将在后缀处停止,但由于您总是生成一个无符号的long-long,因此您并不真正关心后缀。我不相信它也能用42E + 10来工作——尽管产生的值是整数,C和C++只定义浮点数的E’符号。
除此之外,您需要/希望传递0作为转换基数,在这种情况下,它实现了通常的C约定,即前导0表示八进制,0x表示十六进制,1-9表示十进制。strtoull与它所得到的最接近。这将在后缀处停止,但由于您总是生成一个无符号的long-long,因此您并不真正关心后缀。我不相信它也能用42E + 10来工作——尽管产生的值是整数,C和C++只定义浮点数的E’符号。
除此之外,您需要/希望传递0作为转换基数,在这种情况下,它实现了通常的C约定,即前导0表示八进制,0x表示十六进制,1-9表示十进制。您可以使用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;
}
您可以使用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;
}