我有64位数字由各种位字段组成,我正在编写一个简单的python实用程序来解析数字。我面临的问题是低32位由一个场组成,并且使用位移或位掩码的某种组合不仅仅给出32位。
big_num = 0xFFFFFFFFFFFFFFFF
some_field = (big_num & 0x00FFFF0000000000) # works as expected
field_i_need = big_num & 0x00000000FFFFFFFF # doesn't work
field_i_need
等于big_num
,而不是低32位。
我在这里错过了一些简单的东西吗?
谢谢!
马修
答案 0 :(得分:4)
>>> big_num = 0xFFFFFFFFFFFFFFFF
>>> some_field = (big_num & 0x00FFFF0000000000) # works as expected
>>> field_i_need = big_num & 0x00000000FFFFFFFF # doesn't work
>>> big_num
18446744073709551615L
>>> field_i_need
4294967295L
似乎有效,或者我错过了这个问题。无论如何,我正在使用Python 2.6.1。
为了您的信息,我在一段时间之前询问了一些与之相关的question。
答案 1 :(得分:2)
您需要使用长整数。
foo = 0xDEADBEEFCAFEBABEL
fooLow = foo & 0xFFFFFFFFL
答案 2 :(得分:2)
无论如何,谢谢大家的回复。附加'L'似乎可以解决问题,这是一次性的,所以我对这种方法感到满意。
谢谢,
马修
答案 3 :(得分:0)
显然,如果它是一次性的,那么通过在文字中附加'L'来使用长整数是快速的答案,但对于更复杂的情况,你可能会发现如果你看{{{{{{{ 3}}因为这就是你使用bitmasks的方式。
我认为我的个人偏好可能是Does Python have a bitfield type?,因为它在标准库中,并且有一个非常清晰的API。