2011-08-09 80 views
9

我想讀取一個JavaScript中的二進制文件,這個二進制文件可以通過XMLHttpRequest獲得並且能夠處理這些數據。從我的研發,我發現讀一個二進制文件數據到一個數組如何將二進制數據讀取到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); 
}; 

我怎麼這個二進制數據數組轉換爲人類可讀的字符串這種方法嗎?

+1

'XMLHttpRequest.responseType 「arrayBuffer」 在Chrome supported.'。 –

+0

此問題可能有助於他人:http://stackoverflow.com/questions/6965107/converting-between-strings-and-arraybuffers –

回答

7

我相信你會覺得這有幫助:http://jsdo.it/tsmallfield/uint8array

點擊javascript標籤。 將出現將字符串中的Uint8Array轉換的代碼。筆者展示了2種方法:

  • 第一個是關於創建視圖。
  • 第二個偏移字節。

編輯:報告的完整性

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

ありがとうございました;-) – deztructicus

+1

不客氣:) – 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; 
} 

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data代碼瞭解更多詳情

+0

x應該是我。雖然,我無法編輯單個字符。 – Eddie

相關問題