使用Ruby作为Javascript获得与按位异或相同的结果

时间:2013-06-12 01:16:43

标签: javascript cryptography web-scraping crc32

在Ruby中:

-1104507 ^ 3965973030 => -3966969949

在Javascript中:

-1104507 ^ 3965973030 => 327997347

有人问similar question here,但答案只是指向Closure的包装。我需要一种从Ruby获得相同答案的方法,因为我可以将此代码移植到其中。

我需要一种能够从Ruby中的任何A ^ B获取任何整数AB的JavaScript结果。

2 个答案:

答案 0 :(得分:1)

这两个相同的结果,模2 32 。在Ruby中,您可以& 4294967295使结果与Javascript中的结果相同。

要涵盖所有情况,您需要考虑Javascript认为二进制值为 signed 32位整数。另一方面,Ruby将从& 4294967295操作生成 unsigned 32位整数。

所以,在Javascript中简单地说:

c = a ^ b

在Ruby中获得同样的东西:

c = (a ^ b) & 4294967295
c -= 4294967296 if c > 2147483647

答案 1 :(得分:0)

感谢Mark Adler的初步提示,我认为这是通过算法进行的方式:

max_32_int = (2**32)

c = a ^ b

if c > (max_32_int/2)
  c = c - max_32_int
elsif c < -(max_32_int/2)
  c = c + max_32_int
end