hexadecimal convert javascript binary-data hex

convert - javascript hex to decimal



¿Cómo programar hex2bin en Javascript? (8)

Necesito comunicarme entre Javascript y PHP (uso jquery para ajax) pero la salida del script PHP puede contener datos binarios. Es por eso que uso la función bin2hex en PHP. Entonces json_encode se aplica en el lado de PHP. Lo que no sé es cómo convertir una cadena hexadecimal a datos binarios en el lado de Javascript.

¡Gracias!


Aunque no es una respuesta a la pregunta real, quizás sea útil en este caso saber también cómo revertir el proceso:

function bin2hex (bin) { var i = 0, l = bin.length, chr, hex = '''' for (i; i < l; ++i) { chr = bin.charCodeAt(i).toString(16) hex += chr.length < 2 ? ''0'' + chr : chr } return hex }

Como ejemplo, usar hex2bin en b637eb9146e84cb79f6d981ac9463de1 devuelve ¶7ëFèL·mÉF=á , y luego pasar esto a bin2hex devuelve b637eb9146e84cb79f6d981ac9463de1 .

También podría ser útil para crear prototipos de estas funciones en el objeto String :

String.prototype.hex2bin = function () { var i = 0, l = this.length - 1, bytes = [] for (i; i < l; i += 2) { bytes.push(parseInt(this.substr(i, 2), 16)) } return String.fromCharCode.apply(String, bytes) } String.prototype.bin2hex = function () { var i = 0, l = this.length, chr, hex = '''' for (i; i < l; ++i) { chr = this.charCodeAt(i).toString(16) hex += chr.length < 2 ? ''0'' + chr : chr } return hex } alert(''b637eb9146e84cb79f6d981ac9463de1''.hex2bin().bin2hex())


Con referencia a node.js (no en el navegador).

Básicamente, todo está sobre diseñado y no funciona bien.

las respuestas no están alineadas y, aunque con respecto al texto, son lo mismo, todo está por todas partes:

curl http://phpimpl.domain.com/testhex.php | xxd 00000000: de56 a735 4739 c01d f2dc e14b ba30 8af0 .Q.%G9.....;.0.. curl http://nodejs.domain.com/ | xxd 00000000: c39e 56c2 a725 4739 c380 c3ad c3b1 c39c ..Q..%G9........ 00000010: c3a1 37c2 6b30 c28f c3b0 ..;..0....

La forma correcta de implementar esto en el nodo es:

function hex2bin(hex){ return new Buffer(hex,"hex"); } curl http://nodejs.domain.com/ | xxd 00000000: de56 a735 4739 c01d f2dc e14b ba30 8af0 .Q.%G9.....;.0..

Espero que esto ayude.


JavaScript no tiene soporte para datos binarios. Sin embargo puedes emular esto con cuerdas regulares.

var hex = "375771", // ASCII HEX: 37="7", 57="W", 71="q" bytes = [], str; for(var i=0; i< hex.length-1; i+=2){ bytes.push(parseInt(hex.substr(i, 2), 16)); } str = String.fromCharCode.apply(String, bytes); alert(str); // 7Wq



Para responder tu pregunta:

function Hex2Bin(n){if(!checkHex(n))return 0;return parseInt(n,16).toString(2)}

Aquí hay algunas funciones adicionales que pueden ser útiles para trabajar con datos binarios:

//Useful Functions function checkBin(n){return/^[01]{1,64}$/.test(n)} function checkDec(n){return/^[0-9]{1,64}$/.test(n)} function checkHex(n){return/^[0-9A-Fa-f]{1,64}$/.test(n)} function pad(s,z){s=""+s;return s.length<z?pad("0"+s,z):s} function unpad(s){s=""+s;return s.replace(/^0+/,'''')} //Decimal operations function Dec2Bin(n){if(!checkDec(n)||n<0)return 0;return n.toString(2)} function Dec2Hex(n){if(!checkDec(n)||n<0)return 0;return n.toString(16)} //Binary Operations function Bin2Dec(n){if(!checkBin(n))return 0;return parseInt(n,2).toString(10)} function Bin2Hex(n){if(!checkBin(n))return 0;return parseInt(n,2).toString(16)} //Hexadecimal Operations function Hex2Bin(n){if(!checkHex(n))return 0;return parseInt(n,16).toString(2)} function Hex2Dec(n){if(!checkHex(n))return 0;return parseInt(n,16).toString(10)}


Si alguien necesita la otra dirección (bin a hex), aquí está:

function bin2hex(bin) { return new Buffer(bin).toString("hex"); }


Todas las soluciones propuestas utilizan String.fromCharCode , ¿por qué no usar simplemente unescape ?

String.prototype.hex2bin = function() { var i = 0, len = this.length, result = ""; //Converting the hex string into an escaped string, so if the hex string is "a2b320", it will become "%a2%b3%20" for(; i < len; i+=2) result += ''%'' + this.substr(i, 2); return unescape(result); }

y entonces:

alert( "68656c6c6f".hex2bin() ); //shows "hello"


function hex2bin(hex) { var bytes = [], str; for(var i=0; i< hex.length-1; i+=2) bytes.push(parseInt(hex.substr(i, 2), 16)); return String.fromCharCode.apply(String, bytes); }

Gracias a Andris !

Otra información útil sobre este tema (dex2bin, bin2dec) se puede encontrar here . Según eso, aquí hay una solución bin2hex :

parseInt(1100,2).toString(16); //--> c