De texto a Código Binario

Quiero JavaScript para traducir el texto en un área de texto en código binario.

Por ejemplo, si un usuario escribe «TEST» en el textarea, el valor de «01010100 01000101 01010011 01010100» debe ser devuelto.

Me gustaría evitar el uso de una instrucción switch para asignar a cada carácter un código binario de valor (por ejemplo,case "T": return "01010100) o cualquier otra técnica similar.

Aquí un JSFiddle para mostrar lo que quiero decir. Es esto posible en nativos de JavaScript?

  • Encontrado esto a través de Google. Creo que es lo que estás buscando. roubaixinteractive.com/PlayGround/Binary_Conversion/…
  • usted tiene charCodeAt método para las cadenas en js
  • La gente debe ser consciente de que las cadenas se almacenan como UTF-16 en JavaScript. Por lo tanto, usted tendrá UTF-16 representación binaria. Si usted desea algo más, UTF-8, por ejemplo, usted tiene que convertir manualmente charcodes a UTF-8 antes de la codificación binaria (ejemplo here).
InformationsquelleAutor Shrey Gupta | 2013-01-20

11 Comentarios

  1. 44

    Lo que usted debe hacer es convertir cada char utilizando charCodeAt función para obtener el Código Ascii en decimal. A continuación, puede convertir a Binario el valor de uso de 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) + " ";
      }
    }

    Y aquí un violín: http://jsfiddle.net/fA24Y/1/

    • Justo a la izquierda de la almohadilla es
    • Forma alternativa de izquierda pad : var a = 'a'.charCodeAt(0).toString(2); /* a == "1100001" */ a = new Array(9 - a.length).join('0') + a; /* a == "01100001" */.
    • Pregunta: ¿no hay otra manera de hacerlo, como hacer un blob con este texto y, a continuación, utilizando filereader de salida como datos binarios….sin embargo parece que la salida del texto para mí.
    • Esta realidad produce caracteres cuando yo de entrada de determinadas cadenas en un bucle, por lo que hay algo mal con esta función. alejandro respuesta sin embargo funciona.
    • Nota para los lectores futuros: Ser conscientes de que el juego de caracteres no está limitado a 8 bits. Trate de charToBin("𐍈")
    • ¿Por qué no «de entrada.charCodeAt(i)» en su lugar?

  2. 22

    Este podría ser el más simple que usted puede conseguir:

    function text2Binary(string) {
        return string.split('').map(function (char) {
            return char.charCodeAt(0).toString(2);
        }).join(' ');
    }
  3. 8
    1. recorrer la cadena
    2. convertir todos los caracteres a su char código
    3. convertir el char código binario
    4. empuje en una matriz y agregar la izquierda 0s
    5. devolver una cadena separada por espacios

    Código:

    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"

    Otra manera

    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(' ')
      );
    }
    • Se puede omitir la +1 en 9-bin.length+1 haciendo el 8 un 9 como este 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(9-bin.length).join("0") + bin); } return output.join(" "); }
    • Más simple es output.push(('0000000' + bin).slice(-8)). ;- ), Pero algunos personajes, como endash, son más de 8 bits: charCode 8212 -> 10000000010100.
  4. 7
    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. 6

    Aquí es bastante genérico, nativo de la aplicación, que Escribí hace algún tiempo,

    //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
      }
    };

    y para ser utilizado de la siguiente manera:

    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

    Fuente en Github (gist): https://gist.github.com/eyecatchup/6742657

    Espero que ayude. Siéntase libre de utilizar para lo que quieras (bueno, al menos para cualquiera que sea el MIT permite).

  6. 4

    Sólo un toque en la dirección correcta

    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. 4

    Caracteres de 8-bits con 0

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

    Si se necesitan 6 o 7 bits, basta con cambiar .slice(-8)

  8. 2

    Las otras respuestas funcionará para la mayoría de los casos. Pero vale la pena señalar que charCodeAt() y relacionadas con el no trabajar con UTF-8 cuerdas (que es, un tiro de errores si hay personajes fuera de la norma de rango ASCII). He aquí una solución.

    //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 );
    };

    La escape/unescape() funciones están en desuso. Si usted necesita polyfills para ellos, usted puede comprobar fuera de los más integral de la codificación UTF-8 ejemplo encontrar aquí: http://jsfiddle.net/47zwb41o

  9. 1

    este parece ser la versión simplificada

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

    Gracias Majid Laissi para su respuesta

    He hecho 2 funciones fuera de su código:

    el objetivo fue implementar convertation de la cadena de VARBINARY, BINARIO y la espalda

    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;
    };

    y hacia atrás convertation:

    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;
    };

    y aquí es un ejemplo de trabajo: https://jsbin.com/futalidenu/edit?js de la consola,

  11. -1

    Intente esto:

    String.prototype.toBinaryString = function(spaces = 0) {
        return this.split("").map(function(character) {
            return character.charCodeAt(0).toString(2);
        }).join(" ".repeat(spaces));
    }

    Y utilizarlo como este:

    "test string".toBinaryString(1); //with spaces
    "test string".toBinaryString(); //without spaces
    "test string".toBinaryString(2); //with 2 spaces

Dejar respuesta

Please enter your comment!
Please enter your name here