Как я могу преобразовать код ASCII в слово, используя JavaScript для цикла

#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);