@Octet

Как преобразовать строки в бинарный код в JS?

есть ли какие то встроенные (можно и модуль импортировать) способы перевода текста в UTF-8 (или 16), а его в двоичное представление? Естественно, что онлайн перевод невозможен, а писать функцию по переводу не хочу, ибо потребуется для каждого символа копировать его UTF версию, а для каждого UTF символа его бин версию
  • Вопрос задан
  • 2780 просмотров
Решения вопроса 1
dollar
@dollar
Делай добро и бросай его в воду.
code = "й".charCodeAt(0)
//1081 или 0x0439

Далее смотрим, как кодируется UTF-8.
Для русских букв (например, й) упрощённо:
byteCode1 = code >> 6 | 0b11000000;
byteCode2 = code & 0b00111111 | 0b10000000;

Остаётся всё это склеить в одну функцию. В императивном стиле, конечно же, чтобы было понятно, что происходит:
function StringToBin(s) {
  let arr = s.split(''); //разбиваем строку на символы
  arr.forEach((symbol, index) => { //кодируем каждый символ
    let code = symbol.charCodeAt(0);
    let byteCode1 = code >> 6 | 0b11000000;
    let byteCode2 = code & 0b00111111 | 0b10000000;
    arr[index] = (code < 128 ? code.toString(16) : byteCode1.toString(16) + byteCode2.toString(16)).toUpperCase();
  });
  return arr.join(' '); //возвращаем кодированную строку
}

console.log(StringToBin("Хай"));
//D0A5 D0B0 D0B9

Но повторюсь, это упрощённый алгоритм, когда октетов не более двух. Если нужен универсальный вариант, то вам нужно слегка улучшить эту функцию. Проблем не должно возникнуть, ведь я рассказал, как и что нужно делать.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
'Строка'.split('').map(c => c.codePointAt(0).toString(16)).join(' ');
// "421 442 440 43e 43a 430"

Array.from(new TextEncoder().encode('строка')).map(c => c.toString(16)).join(' ');
// "d1 81 d1 82 d1 80 d0 be d0 ba d0 b0"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы