gpt4 book ai didi

c++ - C++ 中整数的稳健解析

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

<分区>

我正在尝试编写一个辅助函数,该函数可用于从配置文件和基于文本的协议(protocol)(由机器而非人类编写)中解析整数。我读过 How to parse a string to an int in C++?但那里的解决方案并没有解决所有问题。我想要的东西(从最重要到最不重要):

  1. 拒绝超出范围的值。 strtoul 和 strtoull 并没有完全实现这一点:给定一个前导减号,该值在“返回类型”中被取反。所以“-5”被愉快地解析并返回 4294967291 或 18446744073709551611 而不是发出错误信号。
  2. 在 C 语言环境中,无论全局语言环境设置如何(或者更好,给我一个选择)。除非有一种方法可以在每个线程的基础上设置全局语言环境,否则排除 strtoul、stoul 和 boost::lexical_cast,而只留下 istringstream(可以在其中注入(inject)语言环境)。
  3. 相当严格。它绝对不能接受尾随垃圾,理想情况下我也想禁止空白。这立即使 strtol 和任何基于它的东西都有点问题。 istringstream 似乎可以在这里使用 noskipws 并检查 EOF,尽管这可能只是一个 GCC 错误。
  4. 理想情况下,控制基数是应该假定为 10 还是应该从 0 或 0x 前缀推断出来。

有什么解决方案吗?是否有一种简单的方法来包装现有的解析机制以满足这些要求,或者最终是否会减少自己编写解析器的工作量?

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