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