2011-04-26 20 views
18

¿Alguien podría guiarme en cómo convertir char a hex en javascript?

Por ejemplo:Char to Hex en javascript

"入 力 さ れ た デ ー タ は 範 囲 外 で す"
a
"\ u5165 \ u529B \ u3055 \ u308C \ u305F \ u30C7 \ u30FC \ u30BF \ u306F \ u7BC4 \ u56F2 \ u5916 \ u3067 \ u3059 \ u3002"

This site does it

sin embargo no puedo entenderlo.

Cualquier sugerencia.

Gracias, Sarbbottam

Respuesta

28

puede recorrer a través de los personajes y utilizar la función charCodeAt para obtener sus valores UTF-16, entonces la construcción de una cadena con ellos.

Aquí hay un código construí que es mucho mejor que el código en el sitio que ha enlazado, y debería ser más fácil de entender:

function string_as_unicode_escape(input) { 
    function pad_four(input) { 
     var l = input.length; 
     if (l == 0) return '0000'; 
     if (l == 1) return '000' + input; 
     if (l == 2) return '00' + input; 
     if (l == 3) return '0' + input; 
     return input; 
    } 
    var output = ''; 
    for (var i = 0, l = input.length; i < l; i++) 
     output += '\\u' + pad_four(input.charCodeAt(i).toString(16)); 
    return output; 
} 

Vamos a romper hacia abajo.

  1. string_as_unicode_escape toma un argumento, input, que es una cadena.
  2. pad_four es una función interna que hace una cosa; almohadilla cadenas con los caracteres principales '0' hasta que la longitud tenga al menos cuatro caracteres de longitud.
  3. Comience definiendo output como una cadena vacía.
  4. Para cada carácter en la cadena, añada \u a la cadena output. Tome el valor UTF-16 del carácter con input.charCodeAt(i), luego conviértalo en una cadena hexadecimal con .toString(16), luego acomódelo con ceros a la izquierda y luego añada el resultado a la cadena output.
  5. Devuelve la cadena output.

Como Tim abajo comentado, también podemos añadir 0x10000 al valor charCodeAt y luego .slice(1) la cadena resultante de llamar .toString(16), para lograr el efecto de relleno.

+0

Muchas gracias. - Sarbbottam – user626818

+5

Puede perder el código de relleno con el siguiente truco: 'salida + = '\\ u' + (input.charCodeAt (i) + 0x10000) .toString (16) .slice (1);' –

+0

Eso es muy inteligente de hecho;) –

0

var hex = nueva matriz ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a B C D e F');

function stringEncode() 
    { 
     var x=document.getElementById("from_text"); 


     var preescape="" + x.value; 
     var escaped=""; 

     var i=0; 
     for(i=0;i<preescape.length;i++) 
     { 
      escaped=escaped+encodeChar(preescape.charAt(i)); 
     } 

     //x=document.getElementById("to_text"); 

        x.value=escaped; 
     //alert("Codigo: "+escapeHtml(escaped)); 
     //document.getElementById('string_example').innerHTML="<b>String example with text</b><br/><br/>String s=\""+escapeHtml(escaped)+"\";<br/><br/>"; 
    } 


    function escapeHtml(unsafe) { 
     return unsafe 
       .replace(/&/g, "&amp;") 
       .replace(/</g, "&lt;") 
       .replace(/>/g, "&gt;") 
       .replace(/"/g, "&quot;") 
       .replace(/'/g, "&#039;"); 
      } 

      function encodeChar(original) 
      { 
        var found=true; 
        var thecharchar=original.charAt(0); 
        var thechar=original.charCodeAt(0); 
        switch(thecharchar) { 
            case '\n': return "\\n"; break; //newline 
            case '\r': return "\\r"; break; //Carriage return 
            case '\'': return "\\'"; break; 
            case '"': return "\\\""; break; 
            case '\\': return "\\\\"; break; 
            case '\t': return "\\t"; break; 
            case '\b': return "\\b"; break; 
            case '\f': return "\\f"; break; 

            default: 
              found=false; 
              break; 
          } 
          if(!found) 
          { 
            if(thechar>127) { 
              var c=thechar; 
              var a4=c%16; 
              c=Math.floor(c/16); 
              var a3=c%16; 
              c=Math.floor(c/16); 
              var a2=c%16; 
              c=Math.floor(c/16); 
              var a1=c%16; 
            // alert(a1); 
              return "\\u"+hex[a1]+hex[a2]+hex[a3]+hex[a4]+"";   
            } 
            else 
            { 
              return original; 
            } 
          } 


      } 

// ------------------------ lo llamarias con

1
function string_as_unicode_escape(str){ 
    return str.split("").map(function(s){ 
     return "\\u"+("0000" + s.charCodeAt(0).toString(16)).slice(-4); 
    }).join(""); 
}