traduccion example etf bitwise javascript binary

example - ¿Hay alguna manera de leer datos binarios en JavaScript?



bitwise traduccion (10)

Me gustaría inyectar datos binarios en un objeto en JavaScript. ¿Hay alguna forma de hacer esto?

es decir

var binObj = new BinaryObject(''101010100101011'');

Algo para ese efecto. Cualquier ayuda sería genial.



En todos los navegadores recientes, puede hacer:

xhr.overrideMimeType(''text/plain; charset=x-user-defined'');

Y recupera una cadena. Para obtener el resultado binario, tendrás que hacer

data.charCodeAt(pos) & 0xff;

En las compilaciones nocturnas de Firefox y Chrome puedes recuperar el valor como ArrayBuffer

xhr.responseType = "arraybuffer";

El resultado es luego accesible allí

xhr.mozResponseArrayBuffer // Firefox xhr.response // Chrome

Luego puede aplicar un TypedArray (por ejemplo: Int32Array) o un DataView en el búfer para leer el resultado.

Para facilitar este proceso, hice un parche jQuery para admitir el tipo binario y un contenedor DataView que usa la última función de lectura disponible del navegador.



Eso sería al revés ... pow y squareroot podrían ser calculados por la clase de matemáticas ... No sé si es la manera más rápida, pero es tan rápido como la calculadora de Windows en la "vista de programador" .

AlertFormatedBin(); function AlertFormatedBin() { var vals = decToBinArr(31,8); var i; var s = ""; var mod = vals.length % 4; for(i= 0; i <mod;i++) { s+=vals[i]; } if(i>0) s+=" "; var j = i; for(i;i<vals.length;i++) { s+=vals[i]; if(i-j != 0 && (i+1-j)%4 == 0) { s+=" "; } } alert(s); } function decToBinArr(dec, minSize) { var mod = dec%2; var r = new Array(); if(dec > 1) { dec-=mod; var bd = squareRootRoundedDown(dec); if(minSize && minSize-1 > bd) bd = minSize-1; else var i; for(i = bd; i>0;i--) { var nxt = pow(2,i); if(dec >= nxt) { r[i] = 1; dec-=nxt; } else { r[i] = 0; } } } r[0]= mod; r.reverse(); return r; } function squareRootRoundedDown(dec) { if(dec<2) return 0; var x = 2; var i; for(i= 1;true;i++) { if(x>=dec) { i = x == dec ? i : i-1; break; } x= x*2; } return i; } function pow(b,exp) { if(exp == 0) return 0; var i = 1; var r= b; for(i = 1; i < exp;i++) r=r*b; return r; }



JavaScript tiene muy poco soporte para datos binarios en bruto. En general, es mejor vivir dentro de esta restricción. Sin embargo, hay un truco que estoy considerando intentar para un proyecto mío que implica manipular mapas de bits enormes para hacer operaciones de conjunto en una base de datos OLAP. Esto no funcionará en IE .

La idea básica es la siguiente: coaccionar los datos binarios en un archivo PNG para enviarlos a JavaScript, por ejemplo, un mapa de bits podría ser un PNG en blanco y negro, y el negro es 100% transparente. Luego use las operaciones de Lienzo para hacer la manipulación de datos en modo bit.

HTML5 Canvas incluye un tipo de matriz de píxeles , que permite el acceso a bytes en una imagen. Canvas también admite operaciones de composición, como XOR. Aligerar y oscurecer debería ser capaz de hacer AND y OR. Es probable que estas operaciones estén bien optimizadas en cualquier navegador que las admita, probablemente utilizando la GPU.

Si alguien intenta esto, por favor dígame qué tan bien funciona.


Javascript no proporciona un mecanismo para cargar un objeto de ninguna forma que no sean cadenas simples.

Lo más cerca que puede hacer es serializar el objeto en una cadena, opcionalmente encriptarlo / comprimirlo, enviarlo al navegador y descifrarlo / descomprimirlo si es necesario, verificando la cordura, eval () y rezar ().

En lugar de usar eval (que no es seguro), puede usar su propio formato (alternativamente, xml o json para el que hay muchas librerías) y analizarlo usted mismo.

Como nota al margen, si desea que esto no se ofusque después de que el navegador obtiene los datos utilizables (después de descifrar / descomprimir), es demasiado fácil de eludir.


La codificación porcentual puede deshacer cadenas en una representación directa 1 <-> 1 de cualquier blob binario y también es portátil en todos los navegadores;

unescape("%uFFFF%uFFFF%uFFFF");

La mayoría de los exploits del navegador usan esta técnica para incrustar Shellcode en páginas HTML, funciona muy bien para crear flujos binarios arbitrarios.


Puedes usar parseInt:

var bin = parseInt(''10101010'', 2);

El segundo argumento (el radix) es la base de la entrada.


github.com/jDataView/jBinary "hace que sea más fácil crear, cargar, analizar, modificar y guardar archivos binarios complejos y estructuras de datos tanto en el navegador como en Node.js."

No lo he usado, pero es lo que encontré cuando hice la misma pregunta aquí ...