Reputation: 497
I have two strings:
var temp1 = "6219000041889600";
var temp2 = "FFFFFFFFFFFFFFFF";
I would like to XOR these two, however I know that in JavaScript you cannot XOR string and can only for int.
So Is there a way to do this? I know for the first value i can use:
var temp1_A= parseInt(temp1); //equal to 6219000041889600
However
var temp1_B= parseInt(temp12,16) // yields 1152921504606847000
Then performing temp1_A ^ temp1_B
yields 1159140504648736600
(but this is decimal) and converting back to HEX is 10161825C85ADF58
which is not my desired result.
It should be (when both hex according to Here)
6219000041889600 ^ FFFFFFFFFFFFFFFF = 9DE6FFFFBE7769FF`
but how would I go about XOR'ing this value with 8-bytes of FF.
Upvotes: 2
Views: 8221
Reputation: 665344
You've left the bounds of the 31-bit integer precision in JavaScript. You'll need to process your strings in chunks:
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;
}
or maybe easier 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;
}
Upvotes: 8