【问题标题】:Javascript - How can I use hexadecimal values as array keys?Javascript - 如何使用十六进制值作为数组键?
【发布时间】:2015-03-23 17:56:30
【问题描述】:

问题
只有 10 到 ff 的 HEX 值有效。我不能将 00 到 0f 分配为键;他们似乎从中被淘汰了。我的理解是,这些值需要引号才能起作用,但情况似乎并非如此。我什至读过这个article 并没有帮助。 如何将这些 HEX 值分配为数组键?

背景
我要做的是创建一个替换数组,其中包含将用于替换其他 HEX 值的 HEX 值。令人困惑?让我告诉你:

这个 HEX 字符串进来(已更改为 HEX 的文本):2a2b

然后我的目标是使用替换数组将其更改为另一个十六进制字符串,如下所示:1fa9

我能想到的最快方法是将 HEX 值分配给数组键,这样我可以查找与十六进制值匹配的键并立即将其替换为它的值,如下所示:

// I'm working with chunks of 25 fyi
for (var i = 0; i < 25; i++) {
  dataChunck[i] = substitueArray[dataChunck[i]];
}

我的代码的其余部分
这已被缩减为您所需要的。 hexValues 是一个十六进制值 00 到 ff 的数组。

// Start at array index 1 because be defined and saved 0 already
for (var x = 1; x < 256; x++) {
  if (counter > 255) {
    break; // We now have all 256 HEX values, stop
  }
  // We want to allow 256 as an option so go 1 higher (257)
  if (sub > 0 && sub < 257) {
    // If the number (HEX value) is not already saved save it
    if (sboxValues.indexOf(hexValues[sub - 1]) < 0) {
      // RIGHT HERE IS THE PROBLEM!!!
      // This assigns a HEX value as the key and saves sub to it
      // sub as you can see gets converted to HEX as its saved
      sboxValues[hexValues[x]] = hexValues[sub - 1];
      counter++;
    } else {
      // Glitch: That number has been saved, redo this round
      // Keep x on track so we don't accidently reuse it
      x--;
    }
    sub += num; // Move on to new number
  } else {
    // Removed. You don't need to see this code
    // Keeps x on track so we don't accidently reuse it
  }
}

【问题讨论】:

    标签: javascript arrays key hex


    【解决方案1】:

    您要做的是在数组中包含字符串键。这是不可能的。

    您可以做的是使用普通对象作为映射(而不是数组),或者只需将您希望用作键的十六进制字符串转换为具有 parseInt 的十进制表示,例如:

    sboxValues[parseInt(hexValues[x], 16)] = hexValues[sub - 1];
    

    【讨论】:

    • 我也在考虑采用小数路线。虽然我不擅长 Javascript,但 PHP 更适合我。所以你输入的代码是保存十六进制值的十进制键正确吗?
    • @Blizzardengle:是的,但最好的方法是尝试一下;-)
    • 当然。非常感谢这个答案。我最初是在测试更改我的整个代码块来管理小数而不是 HEX,但从来没有想过这样做这么简单。这为我节省了很多工作。
    猜你喜欢
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 2019-10-31
    • 2012-11-18
    • 2014-09-04
    • 2014-02-09
    相关资源
    最近更新 更多