admin管理员组

文章数量:1322838

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.

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.

Share Improve this question edited Jun 4, 2015 at 18:20 Evan Davis 36.6k7 gold badges52 silver badges58 bronze badges asked Jun 4, 2015 at 18:06 user2577497user2577497 4979 silver badges17 bronze badges 2
  • 1 JavaScript's binary operators currently only support up to 32-bit integers (4 bytes). To exceed that, you'll have to process the strings in segments that fit under that limit and concatenate the results. – Jonathan Lonowski Commented Jun 4, 2015 at 18:13
  • You'll need to either look for a BigInt implementation, or parse those hex strings to arrays of 32-bit ints and do the operation manually. – David Ehrmann Commented Jun 4, 2015 at 18:20
Add a ment  | 

1 Answer 1

Reset to default 8

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

本文标签: javascriptHow to use the XOR quotquot on two stringsStack Overflow