C’è un modo per leggere i dati binari in JavaScript?

Vorrei iniettare dati binari in un object in JavaScript. C’è un modo per fare questo?

vale a dire

var binObj = new BinaryObject('101010100101011'); 

Qualcosa in questo senso. Qualsiasi aiuto sarebbe grande.

Puoi usare parseInt:

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

Il secondo argomento (la radice) è la base dell’input.

C’è questa libreria ajax binaria che è spiegata qui e c’è anche un’altra libreria di parser binario in grado di gestire più tipi di dati.

Puoi anche guardare a Google Gears con un object Blob binario o dare un’occhiata a un wrapper javascript per Flash che fornisce un’implementazione nativa di ByteArray .

Oppure … puoi sederti ad aspettare e sperare che tutte queste cose diventino standard 🙂

Su tutti i browser recenti puoi fare:

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

E recuperare una stringa. Per ottenere il risultato binario dovrai farlo

 data.charCodeAt(pos) & 0xff; 

Nelle build notturne di Firefox e Chrome è ansible recuperare il valore come ArrayBuffer

 xhr.responseType = "arraybuffer"; 

Il risultato è quindi accessibile lì

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

Quindi è ansible applicare un TypedArray (ad esempio: Int32Array) o un DataView sul buffer per leggere il risultato.


Per semplificare questo processo, ho creato una patch jQuery per supportare il tipo binario e un wrapper DataView che utilizza l’ultima funzione di lettura disponibile del browser.

JavaScript ha pochissimo supporto per i dati binari non elaborati. In generale, è meglio vivere all’interno di questa restrizione. Tuttavia, c’è un trucco che sto considerando di provare per un mio progetto che riguarda la manipolazione di enormi bitmap per eseguire operazioni di set in un database OLAP. Questo non funzionerà in IE .

L’idea di base è questa: costringere i dati binari in un PNG per inviarli a JavaScript, ad esempio una bitmap potrebbe essere un PNG in bianco e nero, con il nero che è trasparente al 100%. Quindi utilizzare le operazioni Canvas per eseguire la manipolazione dei dati bit a bit.

La canvas HTML5 include un tipo di matrice di pixel , che consente l’accesso ai byte in un’immagine. Canvas supporta anche operazioni di compositing, come XOR. Schiarire e scurire dovrebbero essere in grado di fare AND e OR. È probabile che queste operazioni siano ottimizzate bene in qualsiasi browser che le supporti, probabilmente usando la GPU.

Se qualcuno ci prova, per favore fammi sapere come funziona.

Quello sarebbe il contrario … pow e squareroot potrebbero essere calcolati dalla class Math … Non so se è il modo più veloce, ma è veloce come il Calcolatore di Windows nella “Vista programmatore” .

 AlertFormatedBin(); function AlertFormatedBin() { var vals = decToBinArr(31,8); var i; var s = ""; var mod = vals.length % 4; for(i= 0; i 0) s+=" "; var j = i; for(i;i 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; } 

Nel prossimo futuro sarai in grado di utilizzare ArrayBuffer e File API Blob .

Come sottolineato da @Zippy in un commento, le soluzioni più recenti (alla fine del 2016) includono:

  • DataView (standard)
  • jDataView (polyfill / estensione di DataView)
  • jBinary (creato su jDataView)

Javascript non fornisce un meccanismo per caricare un object in una forma diversa dalle semplici stringhe.

La cosa più semplice che puoi fare è serializzare l’object su una stringa, opzionalmente crittografarlo / comprimerlo, inviarlo al browser e decifrare / decomprimere, se necessario, controllando la sanità mentale, eval () e pray ().

Invece di usare eval (che non è del tutto sicuro), puoi usare il tuo formato (in alternativa, xml o json per cui ci sono un sacco di librerie) e analizzarlo da solo.

Come nota a margine, se vuoi che questo per l’offuscamento dopo che il browser ottiene i dati utilizzabili (dopo la decrittografia / decompressione), è troppo facile da eludere.

La codifica percentuale può rimuovere le stringhe in una diretta 1 < -> 1 rappresentanza di qualsiasi blob binario ed è anche portabile tra i browser;

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

La maggior parte degli exploit del browser utilizzano questa tecnica per incorporare lo shellcode in pagine HTML, funziona molto bene per la creazione di flussi binari arbitrari.

jBinary “semplifica la creazione, il caricamento, l’analisi, la modifica e il salvataggio di file binari complessi e strutture dati sia in browser che in Node.js.”

Non l’ho usato, ma è quello che ho trovato quando ho fatto la stessa domanda posta qui …