12

私のプログラムでは、文字列を見ていて、それが 32 ビット整数を表しているかどうかを知りたいと思っています。

現在、最初に を使用して数字であるかisdigit()どうかを確認し、次に 2^32 の値を超えているかどうかを確認します (符号なしの値は気にしないと仮定します)。

入力文字列に有効な 32 ビット整数が含まれていることを確認する最善の方法は何ですか?

4

7 に答える 7

5

別のアイデアとして、値を 4 バイトにパックできるかどうかを確認します。

>>> from struct import pack, error
>>> def test_32bit(n):
...     try:
...             pack("i", n)
...     except error:
...             return False
...     return True
... 

pack("I", n)代わりに、符号なしの値を使用する場合。

于 2012-08-13T06:44:55.287 に答える
5

最大の 32 ビット整数が であると仮定すると0xffffffff

次に、数値がこの値より大きいかどうかを確認する必要があります。

abs(n) <= 0xffffffff

数値をラップするabs()と、負のケースも処理されます。

于 2018-03-01T11:46:59.690 に答える
4

符号なしの値の場合、これは機能します。

>>> 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
于 2012-08-13T06:04:44.543 に答える
4
>>> def is_int32(number):
...     try:
...         return not(int(number)>>32)
...     except ValueError:
...         return False
于 2012-08-13T06:18:04.967 に答える