Javascript - 如何使用十六进制值作为数组键?
Javascript - How can I use hexadecimal values as array keys?
问题
只有 10 到 ff 的十六进制值有效。我不能将 00 到 0f 分配为键;他们似乎被抛弃了。我的理解是这些值需要引号才能起作用,但情况似乎并非如此。我什至读了这个 article 但它没有帮助。 如何将这些 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
}
}
您要做的是在数组中包含字符串键。那是不可能的。
你可以做的是使用普通对象作为映射(而不是数组),或者只是将你想用作键的十六进制字符串转换为它们的十进制表示 parseInt
,例如:
sboxValues[parseInt(hexValues[x], 16)] = hexValues[sub - 1];
问题
只有 10 到 ff 的十六进制值有效。我不能将 00 到 0f 分配为键;他们似乎被抛弃了。我的理解是这些值需要引号才能起作用,但情况似乎并非如此。我什至读了这个 article 但它没有帮助。 如何将这些 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
}
}
您要做的是在数组中包含字符串键。那是不可能的。
你可以做的是使用普通对象作为映射(而不是数组),或者只是将你想用作键的十六进制字符串转换为它们的十进制表示 parseInt
,例如:
sboxValues[parseInt(hexValues[x], 16)] = hexValues[sub - 1];