Javascript 如何使用XOR^&引用;两条腿走路

Javascript 如何使用XOR^&引用;两条腿走路,javascript,Javascript,我有两条线: var temp1 = "6219000041889600"; var temp2 = "FFFFFFFFFFFFFFFF"; 我想对这两个进行异或运算,但我知道在JavaScript中不能对字符串进行异或运算,只能对int进行异或运算 有没有办法做到这一点?我知道我可以使用的第一个值是: var temp1_A= parseInt(temp1); //equal to 6219000041889600 然而 var temp1_B= parseInt(temp12,16) /

我有两条线:

var temp1 = "6219000041889600";
var temp2 = "FFFFFFFFFFFFFFFF";
我想对这两个进行异或运算,但我知道在JavaScript中不能对字符串进行异或运算,只能对int进行异或运算

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

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

var temp1_B= parseInt(temp12,16) // yields 1152921504606847000 
然后执行
temp1\u A^temp1\u B
产生
1159140504648736600
(但这是十进制的),并将其转换回十六进制是
10161825C85ADF58
,这不是我想要的结果

它应该是(当两个十六进制都符合时)


但是我如何用8字节的FF对这个值进行异或运算。

在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;
}

JavaScript的二进制运算符目前最多只支持32位整数(4字节)。要想超过这一限制,您必须在符合该限制的段中处理字符串并连接结果。您需要寻找BigInt实现,或者将这些十六进制字符串解析为32位int的数组并手动执行操作。完美的第二个操作效果惊人。非常感谢你的帮助!
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;
}
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;
}