我有一个用JS写的代码,可以把x,y,z解析成1个数字.

有没有可能只知道最终的数字和对它进行的操作,就能以某种方式恢复操作并得到x,y,z? 为了测试反向过程,我在rever函数中硬编码了x,y,z,它起作用了.但我需要的是从parsedOutput中取回x,y,z

let ParseWithXor = () => {
  let x = 25;
  let y = 8;
  let z = 110;
  let finalOutput = 0;
  finalOutput = finalOutput ^ (x << 9);
  console.log(` finalOutput ^ (${x} << 9) = ${finalOutput}`);
  finalOutput = finalOutput ^ (y << 5);
  console.log(` finalOutput ^ (${y} << 5) = ${finalOutput}`);
  finalOutput = finalOutput ^ z;
  console.log(`finalOutput ^ ${z} = ${finalOutput}`);
  return finalOutput;
};

let Revert = (parsedOutput) => {
  console.log(parsedOutput);
  parsedOutput = parsedOutput ^ 110;
  console.log(parsedOutput);
  parsedOutput = parsedOutput ^ (8 << 5);
  console.log(parsedOutput);
  parsedOutput = parsedOutput ^ (25 << 9);
  console.log(parsedOutput);
};

ParseWithXor();
console.log("-------------------------------------");
Revert(13166);


finalOutput ^ (25 << 9) = 12800
finalOutput ^ (8 << 5) = 13056
finalOutput ^ 110 = 13166
--------------------------------------
13166
13056
12800
0

推荐答案

如果你把一个整数与整数进行两次异或,就会得到原始的数字

(a ^ b) ^ b = a

XOR运算的顺序并不重要

a ^ b ^ c  = b ^ a ^ c

所以如果你有

a ^ c0 ^ c1 ^ c2 = b

然后

a = b ^ c0 ^ c1 ^ c2

所以答案是肯定的,你只需按相反的顺序进行异或运算就可以得到子结果……如果你只想要原始价值,也可以按任何顺序.

因此,您拥有:

w0 = 0;
w1 = w0 ^ (x << 9);
w2 = w1 ^ (y << 5);
w3 = w2 ^ (z     );

我会这样颠倒它:

w3 = ...;

// x,y,z from w(i)   |   w(i) from x,y,z
// ---------------------------------------
z = (w3 ^ w2);       |  w2 = w3 ^ (z     ); 
y = (w2 ^ w1) >> 5;  |  w1 = w2 ^ (y << 5); 
x = (w1 ^ w0) >> 9;  |  w0 = w1 ^ (x << 9); 

// x,y,z from w3,w0 but x,y,z must not overlap bits
// z = <0,31> 
// y = <0,15>
// x = <0,(max/512)-1> 
// ----------------------------------------------
w = w0 ^ w3;
z = w & 31; w >>= 5;
y = w & 15; w >>= 4;
x = w;

Javascript相关问答推荐

获取加载失败:获取[.]添加时try 将文档添加到Firerestore,Nuxt 3

如何获取转换字节的所有8位?

如何修复循环HTML元素附加函数中的问题?

在React中获取数据后,如何避免不必要的组件闪现1秒?

扫描qr code后出错whatter—web.js

无法检测卡片重叠状态的问题

如何在输入元素中附加一个属性为checkbox?

编剧如何获得一个div内的所有链接,然后判断每个链接是否都会得到200?

保持物品顺序的可变大小物品分配到平衡组的算法

Chart.js-显示值应该在其中的引用区域

类构造函数不能在没有用With Router包装的情况下调用

查询参数中的JAVASCRIPT/REACT中的括号

Rxjs流中生成IMMER不能在对象上操作

使用父标签中的Find函数查找元素

在Odoo中如何以编程方式在POS中添加产品

不同表的条件API端点Reaction-redux

React Refs不与高阶组件(HOC)中的动态生成组件一起工作

有没有办法在R中创建一张具有多个色标的热图?

如何在Web项目中同步语音合成和文本 colored颜色 更改

在JS/TS中构造RSA公钥