将字符串转换为整数 - 每个表示
是否有函数或库可以将 C 中作为 char[]
给出的任何(默认、八进制、十六进制等)整数转换为 无符号长长整型
?
示例:
1
1l
1ul
42e+10
0x2aLL
01234u
...
atoi
在 0x... 和后缀 u/l 方面存在一些问题。
Is there a function or library that can convert any (default, octal, hex, ...) integer in C given as a char[]
into an unsigned long long int
?
Examples:
1
1l
1ul
42e+10
0x2aLL
01234u
...
atoi
has some problems with 0x... and the suffixes u/l.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
strtoull
已经是最接近的了。这将在后缀处停止,但由于您总是生成一个unsigned long long
,因此您并不真正关心后缀。我也不相信它能与42e+10
一起使用——尽管生成的值是一个整数,但 C 和 C++ 只为浮点数定义了“e”表示法。除此之外,您需要/想要传递
0
作为转换基数,在这种情况下,它实现了通常的 C 约定,即前导0
表示八进制,0x
表示十六进制,1-9
表示十进制。strtoull
is about as close as it gets. This will stop at the suffix, but since you're always producing anunsigned long long
, you don't really care about the suffix anyway. I don't believe it will work with42e+10
either -- although the value that produces is an integer, C and C++ only define the 'e' notation for floating point numbers.Other than that, you need/want to pass
0
as the conversion base, in which case it implements the usual C convention that a leading0
signals octal,0x
signals hexadecimal, and1-9
signal decimal.您可以使用 sscanf 并检查返回值以查看它是否做了一些有用的事情,例如:
您可以轻松地将更多种类的格式添加到此列表中。
要将其扩展到浮点值,请以浮点值扫描缓冲区,然后将其转换或舍入为整数值,如下所示:
You could use sscanf and check the return value to see if it did something useful, e.g.:
You can easily add more kinds of formats to this list.
To extend this for floating point values as well, scan the buffer in a floating point value then cast or round it to the integer value, like this: