从 C++ 中的字符串中检索无符号长整数的最安全和最好的方法是什么?
我知道许多可能的方法。
首先,转换取自 atol 的有符号长整数。
char *myStr; // Initalized to some value somehow.
unsigned long n = ((unsigned)atol(myStr));
一个明显的问题是,当存储在 myStr 中的值大于有符号的 long 可以包含的值时会发生什么?atol 检索什么?
下一种可能性是使用 strtoul。
char *myStr; // Initalized to some value somehow.
unsigned long n = strtoul(myStr, 0, 10);
但是,这对于我的需求来说有点过于复杂。我想要一个简单的函数,字符串输入,无符号长基数 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 库中的任何东西都可以将字符串干净地转换为无符号长整数并在失败时抛出异常?
如果这是一个骗局,我深表歉意,但我找不到任何与我完全匹配的问题。