#javascript #arrays #for-loop #ascii
#javascript #массивы #для цикла #ascii
Вопрос:
Ищу решение следующего кода, чтобы придумать имя для приведенного ниже массива
let name=[42,67,74,62,6A,1F,58,64,60,66,64,71];
for(let i=0;i<name.length;i )
{
name[i] =name[i] 1;
}
Любые предложения, какими будут результаты?
Спасибо
Ответ №1:
Ваш исходный массив не является допустимым массивом, потому 6A
что и 1F
не являются допустимыми числами в JavaScript. Кроме того, если все числа в массиве являются шестнадцатеричными числами, вам нужно будет предшествовать им, 0x
чтобы они вели себя правильно (потому что номер base10 42 не совпадает с номером base16 42). Итак, давайте сначала приведем ваш массив в порядок:
let name = [0x42,0x67,0x74,0x62,0x6A,0x1F,0x58,0x64,0x60,0x66,0x64,0x71];
Мы могли бы также использовать строки и анализировать их в base16 (шестнадцатеричные) числа:
let name = ['42','67','74','62','6A','1F','58','64','60','66','64','71'].map(n => parseInt(n, 16));
Теперь мы можем использовать String.fromCharCode
для определения того, что говорит массив:
name.map(String.fromCharCode).join('')
Хотя я не уверен, что это говорит или означает…
Комментарии:
1. Спасибо за комментарий, могу ли я узнать результат, каким будет слово?
2. Часть этого сайта показывает вам дверь — вы должны пройти. Скопируйте приведенный выше код в консоль вашего браузера.
3. Это не очень помогает. Код, который я предоставил, работает. Вывод не имеет никакого смысла, но это то, что вы мне дали. Я понятия не имею, откуда берутся эти числа, что они должны означать, или если они даже должны быть base16 для начала (например.
6A
может представлять числа в base12, base20) — я понятия не имею.4. @RyanWheale но 0x1F не может быть представлен в базе 12
5. @Alex ты упускаешь мою мысль.
1F
Да, технически слишком велико для базы 12 (хотя оно анализируется с помощью radix 12, оно просто «округляется» вниз), но дело в том, что эти числа могут быть в базе 20 или базе 26, базе 32 или что-то еще — OP не указал и просто говорит: «это не такработа» . Они не дают нам ничего, чтобы помочь решить любую проблему, с которой они сталкиваются. Я полагаю, что ASCII является достаточной подсказкой… но все же. немного игры в догадки с нашей стороны.
Ответ №2:
Вы хотите что-то такое?
let name = [42,67,74,62,0x6A,0x1F,58,64,60,66,64,71];
var str = "";
for(let i=0;i<name.length;i )
{
str =String.fromCharCode(name[i]);
}
console.log(str);
Или даже:
let name = [42,67,74,62,0x6A,0x1F,58,64,60,66,64,71];
console.log(String.fromCharCode(...name));
* ОБРАТИТЕ ВНИМАНИЕ, что ваши значения приведены в шестнадцатеричной базе, вы должны указать это, добавив 0x
Комментарии:
1. Есть ли слово, которое я придумал?
Ответ №3:
Поскольку мы не знаем, какую базу представляют числа, а вывод для hex ничего не говорит, мы пробуем базы от 2 до 30 и проверяем, является ли для некоторой базы вывод чем-то действительным.
Примечание: для удаления всех непечатаемых символов ASCII мы используем регулярное выражение
/[^ -~] /g
Вместо использования JavaScript здесь есть много онлайн-инструментов декодирования, таких как
https://geocaching .dennistreysa.de/multisolver / . Там вы можете ввести свой ввод и нажать decode, и он будет декодироваться множеством способов. Это был бы более удобный способ получить слово из входных данных, чем с помощью JavaScript.
let name = ['42','67','74','62','6A','1F','58','64','60','66','64','71'];
const ob = {};
for(let i = 2; i <= 30; i ){
let temp = name.map(x => parseInt(x, i));
// Remove the non printable ASCII Characters
let tempRes = String.fromCharCode(...temp).replace(/[^ -~] /g, "");
ob[`Base${i}`] = tempRes;
}
console.log(ob);