问题
只有10到10的十六进制值才有效。我不能将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是HEX值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
}
}
答案 0 :(得分:2)
您要做的是在数组中使用字符串键。这是不可能的。
你可以做的是使用普通对象作为地图(而不是数组),或者只是将想要用作键的十六进制字符串转换为带有parseInt
的十进制表示,例如:< / p>
sboxValues[parseInt(hexValues[x], 16)] = hexValues[sub - 1];