gpt4 book ai didi

c++ - 将 lexical_cast 用于无符号类型时检查负值

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:21:05 26 4
gpt4 key购买 nike

我有一种情况,我正在获取命令行参数并使用 boost::lexical_cast<unsigned long>(my_param) .我希望 my_param 的负值会导致 lexical_cast 抛出,但它会愉快地转换它们,-1 变成 18446744073709551615 .这看起来很荒谬,因为 unsigned long 的最大值是 2^32-1,它看起来更像是 unsigned long long。

所以我正在寻找一种更智能的方法来将 char * 输入转换为 unsigned long,或者一种方法来验证我没有接受伪装成大 unsigned long long 的负值。

最佳答案

有一个错误报告反对 boost 你的问题,它解释了为什么它会这样:

boost::lexical_cast has the behavior of stringstream, which uses num_get functions of std::locale to convert numbers. If we look at the [22.2.2.1.2] of Programming languages — C++ ( or at [22.2.2.1.2] Working Draft, Standard for Programming Language C++) we`ll see, that num_get uses the rules of scanf for conversions. And in the C99 standard for %u the input value minus sign is optional, so if a negative number is read, no errors will arise and the result will be the two's complement.

还有一个建议的包装解决方法:

https://svn.boost.org/trac/boost/ticket/5494

关于c++ - 将 lexical_cast 用于无符号类型时检查负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13199008/

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