Двоичный код в строку в JavaScript

Я создал программу JavaScript для преобразования строки в двоичный файл.

Input: StackOverflow
Output: 1010011 1110100 1100001 1100011 1101011 
1001111 1110110 1100101 1110010 1100110 
1101100 1101111 1110111 

Теперь я хочу преобразовать этот двоичный файл обратно в строку, как показано ниже. Есть ли способ сделать это?

Input: 1010011 1110100 1100001 1100011 1101011 
1001111 1110110 1100101 1110010 1100110 
1101100 1101111 1110111 

Output StackOverflow

Спасибо

Вы можете проверить решение здесь: Скрыть двоичный файл в текст с помощью javascript

Shivani Sonagara 03.07.2019 11:29
stackoverflow.com/questions/21354235/…
ellipsis 03.07.2019 11:30
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
2
15 297
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Используйте String.fromCharCode() и parseInt( , 2) следующим образом:

const binary = `1010011 1110100 1100001 1100011 1101011 
1001111 1110110 1100101 1110010 1100110 
1101100 1101111 1110111`;

const outputStr = binary
  // split string into an array of base 2 (binary) UTF-16 chars
  .split(' ')
  // map every binary char to a UTF-16 number of base 10
  // and then get the string representation of that UTF-16 number
  .map(bin => String.fromCharCode(parseInt(bin, 2)))
  // join the array back to a single string
  .join('');

console.info(outputStr);
  • String.fromCharCode(number) вернет строку из символьного кода UTF-16.
  • parseInt(binary , 2) преобразует строку количество с основанием 2 в число с основанием 10.

Редактировать:

Поскольку функция String.fromCharCode() принимает несколько символов в качестве параметров, вы также можете использовать Оператор спреда (...) следующим образом:

const binary = `1010011 1110100 1100001 1100011 1101011 
1001111 1110110 1100101 1110010 1100110 
1101100 1101111 1110111`;

const outputStr = String.fromCharCode(
  ...binary.split(' ').map(bin => parseInt(bin, 2))
)

console.info(outputStr);

Редактировать 2:

Поскольку этот ответ со временем получает больше трафика, я также собираюсь добавить решение, чтобы сделать это и наоборот... на всякий случай:

const str = `StackOverflow`;

const outputStr = str.split('') // split in single chars
  .map(c => c.charCodeAt(0) // get the UTF-16 code (10 base)
             .toString(2)) // transform it back to a string (2 base)
  .join(' ') // make single string from array

console.info(outputStr);

Хорошо, братан, все понял, но что означает кодовая корзина, которая используется в первом примере?

Subha Jeet Sikdar 03.07.2019 13:10

@SubhaJeetSikdar bin — это имя параметра функции, которую вы передаете на карту. Карта функций принимает стрелочную функцию с одним параметром, которому вы можете дать любое имя. bin по сути тоже можно назвать someVariable. Сама переменная представляет один элемент из массива. Функция карты выполняет итерацию по всем элементам массива и применяет функцию стрелки (varName => parseInt(varName , 2)) к каждому из них.

MauriceNino 03.07.2019 13:13

Бро, что означает знак `?

Subha Jeet Sikdar 04.07.2019 03:55

Они называются Литералы шаблонов. Проверьте их, они действительно полезны в JavaScript. @SubhaJeetSikdar

MauriceNino 04.07.2019 10:35

NB: если вы поместите символы Unicode через это, вы увидите двоичные числа длиной до 16 бит.

Alnitak 14.10.2020 13:19

const binary = `1010011 1110100 1100001 1100011 1101011 
1001111 1110110 1100101 1110010 1100110 
1101100 1101111 1110111`;

const inputStr = binary.split(' ');
const output = [];
inputStr.forEach(item => {output.push(String.fromCharCode(parseInt(item, 2)))});
console.info(output.join(''));

минус за использование forEach() с push вместо .map . Вы скопировали принятый ответ и сделали его хуже.

Alnitak 14.10.2020 13:19

@Alnitak просто альтернатива. Имеет смысл использовать карту, хотя

Godsonaddy 14.10.2020 13:21

использование foreach/push вместо карты — это антишаблон. Для этого нет веской причины, и это было бы минусом в любом обзоре кода.

Alnitak 14.10.2020 13:32

str  = "01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111"
    
    
function binaryAgent(str) {
      return str.split(' ').map(letter=>String.fromCharCode(parseInt(letter, 2))).join('')
     
}
    
console.info(binaryAgent(str))
  • Сначала мы используем метод .split() для преобразования строки в массив с использованием ' ' (символ пробела)

  • После этого мы используем метод цикла высокого порядка .map() для перебора каждой буквы двоичного кода.

  • Для каждой буквы двоичного кода мы используем String.fromCharCode() для parseInt('каждая буква',2)=>, которая преобразует двоичную строку в число. Второй аргумент «2» вызываемого метода parseInt (основание счисления) определяет, какую систему счисления мы хотим использовать.

  • Наконец, мы можем снова соединить управляемый массив, вызвав метод join(''), но на этот раз мы не используем пробел между

=======

Пожалуйста, добавьте пояснения к вашему ответу, чтобы аудитория могла понять работу кода.

Not A Bot 14.10.2020 15:26

а также объясните, как он улучшает принятый ответ (подсказка: это не так, потому что, кроме включения в функцию, код идентичен, за исключением имен переменных).

Alnitak 14.10.2020 15:40

Другие вопросы по теме