在Python中复制Javascript按位操作

时间:2013-06-14 06:56:22

标签: javascript python bit-manipulation

我正在尝试在Python中复制一个简单的按位Javascript操作。

[使用Javascript]

> 0xA867Df55
  2825379669
> 0xA867Df55 ^ 0
  -1469587627

[Python的]

>>> 0xA867DF55
2825379669L
>>> 0xA867DF55 ^ 0
2825379669L

阅读以下内容:

Bitwise OR in ruby vs javascript

听起来这里的问题是Javascript中的0xA867Df55(2825379669)大于最大的有符号32位int(2147483647),这会导致意外的Javascript结果。

然后邮件继续建议:

“如果出于某种原因你想在Ruby中重现它,你会用1FFFFFFFF和你的数字进行比较,这样你只能在最低有效32位上运行,然后将它运算为0(它只会给你带来同样的结果)。“

但如果我试试这个:

>>> (0xA867DF55 & 0x1FFFFFFF) ^ 0
141025109L

我只需要在Python中复制Javascript行为。任何人都可以建议适当的按位操作吗?

感谢。

1 个答案:

答案 0 :(得分:4)

如何从uint32转换为int32。

import struct
print struct.unpack('i', struct.pack('I', 0xA867Df55))[0]

输出

-1469587627

或者@Ashwini建议:

import ctypes
print ctypes.c_int(0xA867DF55 ^ 0).value

输出

-1469587627