如何检查十进制数是否在unsigned int 32的范围内?



我有一个c++控制台应用程序,其中输入参数argv[1]应该是一个字符串,表示uint32_t范围内的十进制数。

当数字不在uint32_t范围内(即0或大于4294967295)时,应用程序返回错误码1。

我努力寻找一种可行的方法。

任何想法?

unsigned long类型必须至少有32位,因此它应该能够表示任何uint32_t值。

这意味着您应该能够使用std::strtoul转换argv[1],然后控制unsigned longuint_32_t具有相同的秩,或者该值不大于2**32 -1

如果我正确理解了你的问题,你的问题不是如何用c++编写代码,而是如何从问题开始:

首先,0(0)是uint32_t的有效值,所以您只需要检查该数字是否大于最大值,而不需要检查该数字是否为零。

如果程序只使用数字作为输入,则不可能输入负值(因为负号不是数字)。

如果您使用strtoul(如其他答案所建议的),则必须检查errno,因为该函数返回最大值(4294967295),如果在argv[1]中指定此数字(这将是有效的),并且如果指定更大的数字(这将是无效的)。

如果您不想使用strtoul来编写这个程序,您还可以使用以下方法来比较两个表示为字符串的数字:

  • 计数不包括前导零的数字个数。
    位数多的号码越大。
  • 如果数字相同,则查找第一个不相同的数字。
    这个数字在大数中会更大。
    所有数字相等,表示号码相等。

此方法也适用于大数-例如有100位十进制数字的数。

您只需将字符串argv[1]与字符串"4294967295"进行比较。

相关内容

  • 没有找到相关文章

最新更新