如何使用XOR" ^"在两个字符串上

时间:2015-06-04 18:06:01

标签: javascript

我有两个字符串:

var temp1 = "6219000041889600";
var temp2 = "FFFFFFFFFFFFFFFF";

我想对这两个进行异或,但是我知道在JavaScript中你不能XOR字符串,只能用于int。

那么有办法做到这一点吗?我知道我可以使用的第一个值:

var temp1_A= parseInt(temp1); //equal to 6219000041889600

然而

var temp1_B= parseInt(temp12,16) // yields 1152921504606847000 

然后执行temp1_A ^ temp1_B会产生1159140504648736600(但这是十进制)并且转换回HEX是10161825C85ADF58,这不是我想要的结果。

它应该是(当根据Here时都是十六进制)

6219000041889600 ^ FFFFFFFFFFFFFFFF = 9DE6FFFFBE7769FF`

但是我怎样才能将这个值与8字节的FF进行异或。

1 个答案:

答案 0 :(得分:3)

你已经在JavaScript中留下了31位整数精度的界限。您需要以块的形式处理字符串:

function XOR_hex(a, b) {
    var res = "",
        l = Math.max(a.length, b.length);
    for (var i=0; i<l; i+=4)
        res = ("000"+(parseInt(a.slice(-i-4, -i||a.length), 16) ^ parseInt(b.slice(-i-4, -i||b.length), 16)).toString(16)).slice(-4) + res;
    return res;
}

或者更容易char-by-char:

function XOR_hex(a, b) {
    var res = "",
        i = a.length,
        j = b.length;
    while (i-->0 && j-->0)
        res = (parseInt(a.charAt(i), 16) ^ parseInt(b.charAt(j), 16)).toString(16) + res;
    return res;
}