2011-08-09 14 views
9

Quiero leer un archivo binario en JavaScript que se obtendría a través de XMLHttpRequest y poder manipular esos datos. Desde mi investigación descubrí este método de lectura de datos de un archivo binario en una matriz¿Cómo leo datos binarios en una matriz de bytes en Javascript?

var xhr = new XMLHttpRequest(); 
xhr.open('GET', '/binary_And_Ascii_File.obj', true); 

xhr.responseType = 'arraybuffer'; 

xhr.onload = function(e) { 
    var uInt8Array = new Uint8Array(this.response); 
}; 

¿Cómo convierto esta matriz de datos binarios a una cadena legible-humano?

+1

'XMLHttpRequest.responseType "ArrayBuffer" no se supported.' en Chrome. –

+0

Esta pregunta puede ayudar a los demás: http://stackoverflow.com/questions/6965107/converting-between-strings-and-arraybuffers –

Respuesta

7

Estoy seguro de que les resultará útil: http://jsdo.it/tsmallfield/uint8array.

Haga clic en javascript tab. Aparecerá el código para convertir el Uint8Array en una cadena. El autor muestra 2 método:

  • El primero es sobre la creación de una vista.
  • Los segundos bytes de compensación.

EDIT: informe el código de integridad

var buffer = new ArrayBuffer(res.length), // res is this.response in your case 
    view = new Uint8Array(buffer), 
    len = view.length, 
    fromCharCode = String.fromCharCode, 
    i, s, str;  

/** 
* 1) 8bitの配列に入れて上位ビットけずる 
*/ 
str = ""; 

for (i = len; i--;) { 
    view[i] = res[i].charCodeAt(0); 
} 

for (i = 0; i < len; ++i) { 
    str += fromCharCode(view[i]); 
}  

/** 
* 2) & 0xff で上位ビットけずる 
*/ 
str = ""; 

for (i = 0; i < len; ++i) { 
    str += fromCharCode(res[i].charCodeAt(0) & 0xff); 
} 
+3

た-------You You You;)) – deztructicus

+1

De nada :) – user278064

6
function load_binary_resource(url) { 
    var byteArray = []; 
    var req = new XMLHttpRequest(); 
    req.open('GET', url, false); 
    req.overrideMimeType('text\/plain; charset=x-user-defined'); 
    req.send(null); 
    if (req.status != 200) return byteArray; 
    for (var i = 0; i < req.responseText.length; ++i) { 
    byteArray.push(req.responseText.charCodeAt(i) & 0xff) 
    } 
    return byteArray; 
} 

Ver https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data para más detalles

+0

x debería ser yo. Sin embargo, no puedo editar un solo personaje. – Eddie

Cuestiones relacionadas