5

Python で単純なビット単位の Javascript 操作を複製しようとしています。

【ジャバスクリプト】

> 0xA867Df55
  2825379669
> 0xA867Df55 ^ 0
  -1469587627

【パイソン】

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

以下を読んだ後:

ruby と javascript のビットごとの OR

ここでの問題は、Javascript の 0xA867Df55 (2825379669) が最大の符号付き 32 ビット int (2147483647) よりも大きく、予期しない Javascript の結果を引き起こしていることのようです。

その後、メールは次のように提案します。

「何らかの理由でRubyでそれを再現したい場合は、数値に1FFFFFFFFのANDを付けて、最下位32ビットのみを操作し、次に0でORします(これは何もしませんが、同じ結果が得られます) ."

しかし、私がこれを試してみると:

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

Python で Javascript の動作を再現する必要があるだけです。誰でも適切なビット単位の操作を提案できますか?

ありがとう。

4

1 に答える 1

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
于 2013-06-14T07:04:25.830 に答える