输入格式验证

Posted

技术标签:

【中文标题】输入格式验证【英文标题】: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 【参考方案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

以上是关于输入格式验证的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 日期输入格式验证

判断输入的字符是否为整数(包含整数格式验证)

输入格式验证

验证输入格式

验证用户输入是不是采用这种格式 "ABC123" isvalid boolean

验证:验证邮箱格式是否正确