私のプログラムでは、文字列を見ていて、それが 32 ビット整数を表しているかどうかを知りたいと思っています。
現在、最初に を使用して数字であるかisdigit()
どうかを確認し、次に 2^32 の値を超えているかどうかを確認します (符号なしの値は気にしないと仮定します)。
入力文字列に有効な 32 ビット整数が含まれていることを確認する最善の方法は何ですか?
別のアイデアとして、値を 4 バイトにパックできるかどうかを確認します。
>>> from struct import pack, error
>>> def test_32bit(n):
... try:
... pack("i", n)
... except error:
... return False
... return True
...
pack("I", n)
代わりに、符号なしの値を使用する場合。
最大の 32 ビット整数が であると仮定すると0xffffffff
、
次に、数値がこの値より大きいかどうかを確認する必要があります。
abs(n) <= 0xffffffff
数値をラップするabs()
と、負のケースも処理されます。
符号なしの値の場合、これは機能します。
>>> 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
>>> def is_int32(number):
... try:
... return not(int(number)>>32)
... except ValueError:
... return False