我有两个字符串:
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进行异或。
答案 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;
}