我有一个c++控制台应用程序,其中输入参数argv[1]
应该是一个字符串,表示uint32_t
范围内的十进制数。
当数字不在uint32_t
范围内(即0或大于4294967295)时,应用程序返回错误码1。
我努力寻找一种可行的方法。
任何想法?
unsigned long
类型必须至少有32位,因此它应该能够表示任何uint32_t
值。
这意味着您应该能够使用std::strtoul
转换argv[1]
,然后控制unsigned long
与uint_32_t
具有相同的秩,或者该值不大于2**32 -1
。
如果我正确理解了你的问题,你的问题不是如何用c++编写代码,而是如何从问题开始:
首先,0(0)是uint32_t
的有效值,所以您只需要检查该数字是否大于最大值,而不需要检查该数字是否为零。
如果程序只使用数字作为输入,则不可能输入负值(因为负号不是数字)。
如果您使用strtoul
(如其他答案所建议的),则必须检查errno
,因为该函数返回最大值(4294967295),如果在argv[1]
中指定此数字(这将是有效的),并且如果指定更大的数字(这将是无效的)。
如果您不想使用strtoul
来编写这个程序,您还可以使用以下方法来比较两个表示为字符串的数字:
- 计数不包括前导零的数字个数。
位数多的号码越大。 - 如果数字相同,则查找第一个不相同的数字。
这个数字在大数中会更大。
所有数字相等,表示号码相等。
此方法也适用于大数-例如有100位十进制数字的数。
您只需将字符串argv[1]
与字符串"4294967295"
进行比较。