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

How to check if a decimal number is in range of unsigned int 32?

我有一个 C++ 控制台应用程序,其中输入参数 argv[1] 应该是一个表示 uint32_t.

范围内的十进制数的字符串

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

我费了好大劲才找到可行的方法。

有什么想法吗?

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

这意味着你应该可以使用std::strtoul转换argv[1]然后控制unsigned longuint_32_t具有相同的等级或者该值不是大于 2**32 -1.

如果我没看错你的问题,你的问题不在于如何用C++编写代码,而是如何着手解决问题:

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

如果您的程序仅使用数字作为输入,则不可能出现负值(因为减号不是数字)。

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

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

  • 计算不包括前导零的位数。
    位数越多的数越大。
  • 如果位数相同,则找出第一个不同的数字。
    数字越大那个数字越大。
    如果所有数字都相等,则数字相等。

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

您只需要用这种方式比较字符串 argv[1] 和字符串 "4294967295"