Подтвердить что ты не робот

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

Текст в двоичный код

Я хочу, чтобы JavaScript переводил текст в текстовое поле в двоичный код.

Например, если пользователь вводит "TEST" в текстовое поле, возвращается значение "01010100 01000101 01010011 01010100".

Я бы хотел избежать использования оператора switch, чтобы назначить каждому символу двоичное значение кода (например, case "T": return "01010100) или любую другую аналогичную технику.

Здесь JSFiddle, чтобы показать, что я имею в виду. Возможно ли это в родном JavaScript?

4b9b3361

Ответ 1

Что вам нужно сделать, это преобразовать каждый char с помощью функции charCodeAt, чтобы получить код Ascii в десятичном формате. Затем вы можете преобразовать его в двоичное значение с помощью toString(2):

HTML:

<input id="ti1" value ="TEST"/>
<input id="ti2"/>
<button onClick="convert();">Convert!</button>

JS:

function convert() {
  var output = document.getElementById("ti2");
  var input = document.getElementById("ti1").value;
  output.value = "";
  for (var i = 0; i < input.length; i++) {
      output.value += input[i].charCodeAt(0).toString(2) + " ";
  }
}

И вот скрипка: http://jsfiddle.net/fA24Y/1/

Ответ 2

Это может быть проще всего:

function text2Binary(string) {
    return string.split('').map(function (char) {
        return char.charCodeAt(0).toString(2);
    }).join(' ');
}

Ответ 3

  • пересечь строку
  • конвертировать каждый символ в свой код char
  • преобразует код char в двоичный
  • вставьте его в массив и добавьте левые 0s
  • возвращает строку, разделенную пробелом

код:

function textToBin(text) {
  var length = text.length,
      output = [];
  for (var i = 0;i < length; i++) {
    var bin = text[i].charCodeAt().toString(2);
    output.push(Array(8-bin.length+1).join("0") + bin);
  } 
  return output.join(" ");
}
textToBin("!a") => "00100001 01100001"

Другой способ

function textToBin(text) {
  return (
    Array
      .from(text)
      .reduce((acc, char) => acc.concat(char.charCodeAt().toString(2)), [])
      .map(bin => '0'.repeat(8 - bin.length) + bin )
      .join(' ')
  );
}

Ответ 4

var PADDING = "00000000"

var string = "TEST"
var resultArray = []

for (var i = 0; i < string.length; i++) {
  var compact = string.charCodeAt(i).toString(2)
  var padded  = compact.substring(0, PADDING.length - compact.length) + compact

  resultArray.push(padded)
}

console.log(resultArray.join(" "))

Ответ 5

Вот довольно общая, родная реализация, которую я написал некоторое время назад,

// ABC - a generic, native JS (A)scii(B)inary(C)onverter.
// (c) 2013 Stephan Schmitz <[email protected]>
// License: MIT, http://eyecatchup.mit-license.org
// URL: https://gist.github.com/eyecatchup/6742657
var ABC = {
  toAscii: function(bin) {
    return bin.replace(/\s*[01]{8}\s*/g, function(bin) {
      return String.fromCharCode(parseInt(bin, 2))
    })
  },
  toBinary: function(str, spaceSeparatedOctets) {
    return str.replace(/[\s\S]/g, function(str) {
      str = ABC.zeroPad(str.charCodeAt().toString(2));
      return !1 == spaceSeparatedOctets ? str : str + " "
    })
  },
  zeroPad: function(num) {
    return "00000000".slice(String(num).length) + num
  }
};

и использоваться следующим образом:

var binary1      = "01100110011001010110010101101100011010010110111001100111001000000110110001110101011000110110101101111001",
    binary2      = "01100110 01100101 01100101 01101100 01101001 01101110 01100111 00100000 01101100 01110101 01100011 01101011 01111001",
    binary1Ascii = ABC.toAscii(binary1),
    binary2Ascii = ABC.toAscii(binary2);

console.log("Binary 1:                   " + binary1);
console.log("Binary 1 to ASCII:          " + binary1Ascii);
console.log("Binary 2:                   " + binary2);
console.log("Binary 2 to ASCII:          " + binary2Ascii);
console.log("Ascii to Binary:            " + ABC.toBinary(binary1Ascii));     // default: space-separated octets
console.log("Ascii to Binary /wo spaces: " + ABC.toBinary(binary1Ascii, 0));  // 2nd parameter false to not space-separate octets

Источник находится на Github (gist): https://gist.github.com/eyecatchup/6742657

Надеюсь, это поможет. Не стесняйтесь использовать то, что вы хотите (ну, по крайней мере, для того, что разрешено MIT).

Ответ 6

Просто подсказка в правильном направлении

var foo = "TEST",
    res = [ ];

foo.split('').forEach(function( letter ) {
    var bin     = letter.charCodeAt( 0 ).toString( 2 ),
        padding = 8 - bin.length;

    res.push( new Array( padding+1 ).join( '0' ) + bin );
});

console.log( res );

Ответ 7

8-битные символы с ведущим 0

'sometext'
        .split('')
        .map((char) => '00'.concat(char.charCodeAt(0).toString(2)).slice(-8))
        .join(' ');

Если вам нужно 6 или 7 бит, просто измените .slice(-8)

Ответ 8

Другие ответы будут работать в большинстве случаев. Но стоит отметить, что charCodeAt() и связанные с ними не работают с строками UTF-8 (т.е. Они выбрасывают ошибки, если есть какие-либо символы вне стандартного диапазона ASCII). Вот обходной путь.

// UTF-8 to binary
var utf8ToBin = function( s ){
    s = unescape( encodeURIComponent( s ) );
    var chr, i = 0, l = s.length, out = '';
    for( ; i < l; i ++ ){
        chr = s.charCodeAt( i ).toString( 2 );
        while( chr.length % 8 != 0 ){ chr = '0' + chr; }
        out += chr;
    }
    return out;
};

// Binary to UTF-8
var binToUtf8 = function( s ){
    var i = 0, l = s.length, chr, out = '';
    for( ; i < l; i += 8 ){
        chr = parseInt( s.substr( i, 8 ), 2 ).toString( 16 );
        out += '%' + ( ( chr.length % 2 == 0 ) ? chr : '0' + chr );
    }
    return decodeURIComponent( out );
};

Функции escape/unescape() устарели. Если вам нужны полисы для них, вы можете проверить более полный пример кодировки UTF-8, найденный здесь: http://jsfiddle.net/47zwb41o

Ответ 9

это похоже на упрощенную версию

Array.from('abc').map((each)=>each.charCodeAt(0).toString(2)).join(" ")

Ответ 10

Спасибо, Маджид Лаисси, за ваш ответ

Я сделал 2 функции из вашего кода:

целью было реализовать преобразование строки в VARBINARY, BINARY и обратно

const stringToBinary = function(string, maxBytes) {
  //for BINARY maxBytes = 255
  //for VARBINARY maxBytes = 65535
  let binaryOutput = '';
  if (string.length > maxBytes) {
    string = string.substring(0, maxBytes);
  }

  for (var i = 0; i < string.length; i++) {
    binaryOutput += string[i].charCodeAt(0).toString(2) + ' ';
  }

  return binaryOutput;
};

и обратное преобразование:

const binaryToString = function(binary) {
  const arrayOfBytes = binary.split(' ');

  let stringOutput = '';

  for (let i = 0; i < arrayOfBytes.length; i++) {
    stringOutput += String.fromCharCode(parseInt(arrayOfBytes[i], 2));
  }

  return stringOutput;
};

и вот рабочий пример: https://jsbin.com/futalidenu/edit?js,console