如何使用Python检查数字是否是32位整数?
在我的程序中我正在查看一个字符串,我想知道它是否代表一个32位整数。如何使用Python检查数字是否是32位整数?
目前我首先检查它是否是一个数字,使用isdigit()
,然后检查它是否超过2^32的值(假设我不关心无符号值)。
什么是检查我的输入字符串包含有效的32位整数的最佳方法是什么?
对于无符号值,这将工作:
>>> def is32(n):
... try:
... bitstring=bin(n)
... except (TypeError, ValueError):
... return False
...
... if len(bin(n)[2:]) <=32:
... return True
... else:
... return False
...
>>> is32(2**32)
False
>>> is32(2**32-1)
True
>>> is32('abc')
False
为什么我不能检查它是否落在上限值和下限值的范围内? – user1020069 2012-08-13 06:13:54
通过在bin中使用'try'你正在验证n是一个有效的数字。当你在这里时,只要检查这些位是否少于32位。整天工作...... – dawg 2012-08-13 06:18:52
这很酷..但是不是isDigit已经检查,如果它是一个有效的数字? – user1020069 2012-08-13 06:23:27
>>> def is_int32(number):
... try:
... return not(int(number)>>32)
... except ValueError:
... return False
这对于负数不起作用:>>> is_int32(-1):False – 2017-05-30 03:04:01
只是另一个想法,看看它的值可以被装在一个4个字节:
>>> from struct import pack, error
>>> def test_32bit(n):
... try:
... pack("i", n)
... except error:
... return False
... return True
...
如果用无符号值工作,代替pack("I", n)
。
不要使用裸的except子句,因为它可以捕获诸如KeyboardInterrupt这不应该在这里抓到。 – 2012-08-13 15:29:55
@AbeKarplus我知道,但我只是懒惰:) – Kimvais 2012-08-13 17:42:42
这样不起作用? – Dogbert 2012-08-13 05:40:16
哈哈......是的......但这是一种有效的方式还是有更好的方法呢? – user1020069 2012-08-13 05:44:17
你可以发布你的确切代码,所以我们可以看到实现? – Dogbert 2012-08-13 05:45:54