gpt4 book ai didi

c++ - 你如何从一个字符串中得到一个 unsigned long?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:53:53 27 4
gpt4 key购买 nike

在 C++ 中从字符串中检索无符号长整数的最安全和最佳方法是什么?

我知道许多可能的方法。

首先,转换从 atol 中获取的有符号 long。

char *myStr; // Initalized to some value somehow.
unsigned long n = ((unsigned)atol(myStr));

这个问题很明显,当存储在 myStr 中的值大于有符号长整数可以包含的值时会发生什么? atol 检索什么?

下一个可能性是使用 strtoul。

char *myStr; // Initalized to some value somehow.
unsigned long n = strtoul(myStr, 0, 10);

但是,这对我的需求来说有点过于复杂了。我想要一个简单的函数,字符串输入,unsigned long base 10 输出。此外,错误处理还有很多不足之处。

我发现的最后一种可能性是使用 sscanf。

char *myStr; // Initalized to some value somehow.
unsigned long n = 0;
if(sscanf(myStr, "%lu", n) != 1) {
//do some error handling
}

同样,错误处理还有很多不足之处,而且比我想要的要复杂一些。

剩下的显而易见的选择是我自己编写一个围绕先前可能性之一的包装器,或者编写一些循环遍历字符串并手动转换每个数字直到达到 ULONG_MAX 的东西。

我的问题是,我的 google-fu 找不到的其他选项是什么? C++ std 库中是否有任何东西可以将字符串干净地转换为无符号长整数并在失败时抛出异常?

如果这是一个骗局,我深表歉意,但我找不到任何与我的问题完全匹配的问题。

最佳答案

您可以毫无问题地使用 strtoul。该函数返回一个无符号长整型。如果无法执行转换,则函数返回 0。如果正确的 long 值超出范围,则函数返回 ULONG_MAX 并将 errno 全局变量设置为 ERANGE。

关于c++ - 你如何从一个字符串中得到一个 unsigned long?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1484140/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com