【问题标题】:Input Format Validation输入格式验证
【发布时间】:2012-04-21 12:57:05
【问题描述】:

在 linux 中,如何检查给定的输入是 uint8_t 还是 uint16_t 还是 uint32_t?如何将给定的输入与它们进行比较?

【问题讨论】:

  • 我们在谈论什么样的输入?通过控制台,一个文件,一个 GUI...?
  • 来自文件。例如,我从文件中读取输入 745 我如何检查它是否有效?
  • 您必须缩小范围。许多数字可能是上述所有数字。
  • @Umarniaz:文件始终被视为字节流。从那里您可以根据需要阅读它们:作为 uint8_t、uint16_t 或 uint32_t。您的问题需要更具体
  • 但我想比较它不读取 uint8_t,uint16_t 或 uint32_t

标签: c++ linux


【解决方案1】:
uint16_t value = boost::lexical_cast<uint16_t>(str);

如果输入的字符串不能被转换,它会抛出一个 bad_cast 异常。

【讨论】:

  • 还有其他方法可以检查吗?
  • 是的。它是编程,有一百或一千种其他方法可以做到。
【解决方案2】:

如果您的意思是输入从文件或控制台读取的数字,那么只需执行如下 if 语句:

    #define max_uint8 (1<<8) - 1
    #define max_uint16 (1<<16) - 1
    #define max_uint32 (1<<32) - 1


    if(input > max_uint32) {
        // then it is greater than 32 bits
    } else if (input > max_uint16) {
        // then it is uint32
    } else if (input > max_uint8) {
        // then it is uint16
    } else {
        // then it is uint8
    }

注意:我假设您的输入永远不会超过 32 位,否则您需要检查这一点。

【讨论】:

  • 如果输入大于 32 位怎么办?
  • @Umarniaz 你只需要检查一下。以 64 位整数(即 long long)读取您的数字,再添加一个值 [(1
猜你喜欢
  • 1970-01-01
  • 2018-06-11
  • 1970-01-01
  • 1970-01-01
  • 2013-09-15
  • 1970-01-01
  • 2020-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多