javascript - 是否可以将两个整数打包成十六进制并将它们取回

标签 javascript

我有一个奇怪的要求,
我的目的地只支持一个整数,但我想向它发送两个整数,稍后我想从响应中取回它们。

例如,

允许输入:

 {
    'task': 2
 }

我身边有一种子任务逻辑,但我的目标并不知道这一点。因此,在不告知目标的情况下,我能否以某种方式打包两个整数并在将来解码它们?

这可以用十六进制实现吗?

最佳答案

您可以组合任意两个数字并使用它们的乘积 (a * b) 返回两个数字 只要 a * (a * b) + b < Number.MAX_SAFE_INTEGER

这是一个演示片段:

(() => {
  document.addEventListener("click", handleStuff);
  // formula: c = (a * (a * b)) + b
  // as long as c < 9007199254740991
  const combine = (a, b) => ({
      a: a, 
      b: b,
      get c() { return this.a * this.b; },
      get combined() { return this.a * this.c + this.b; },
      get unraveled() { return [
        Math.floor(this.combined / this.c), 
        this.combined % this.c ]; }
  });
  const log = txt => document.querySelector("pre").textContent = txt;
  let numbers = combine(
    +document.querySelector("#num1").value, 
    +document.querySelector("#num2").value );

  function handleStuff(evt) {
    if (evt.target.nodeName.toLowerCase() === "button") {
      if (evt.target.id === "combine") {
        numbers = combine(
          +document.querySelector("#num1").value, 
          +document.querySelector("#num2").value );
        if (numbers.combined > Number.MAX_SAFE_INTEGER) {
          log (`${numbers.combined} too large, unraveled will be unreliable`);
        } else {
          log (`Combined ${numbers.a} and ${numbers.b} to ${numbers.combined}`);
        }
      } else {
        log(`${numbers.combined} unraveled to ${numbers.unraveled}`);
      }
    }
  }

})();
input[type=number] {width: 100px;}
<p>
  <input type="number" id="num1" 
    value="12315" min="1"> first number
</p>
<p>
  <input type="number" id="num2" 
    value="231091" min="1"> second number
</p>
<p>
  <button id="combine">combine</button>
  <button id="unravel">unravel</button>
</p>

<pre id="result"></pre>

注意:@RallFriedl启发了这个答案

JSFiddle

关于javascript - 是否可以将两个整数打包成十六进制并将它们取回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51779396/

相关文章:

javascript - 从函数返回第二个值的最方便的方法是什么

javascript - 是否保证发送在 anchor 标记点击处理程序中创建的 XHR 请求?

javascript - 设备/服务器开发中的版本控制

javascript - 从服务器返回的日期获取星期几

Javascript 变量不保留值

javascript - e.preventDefault() 之后的链接无法加载,没有 jQuery

javascript - onmouseover 并单击目标 div 并替换文本

javascript - 光滑的.js : Hide slider until images have loaded

javascript - jScrollPane:删除滚动条装订线?

javascript - 如何使用QWebEngineView和qtwebchannel.js一步步加载javascript?