Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将字符串转换为整数-每个表示形式_C_Integer - Fatal编程技术网

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

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作为转换基数,在这种情

是否有一个函数或库可以转换任何默认值,八进制,十六进制。。。C中的整数以char[]的形式表示为无符号长整型

示例:

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;
}