1. 程式人生 > 其它 >javascript 二進位制處理

javascript 二進位制處理

鑑於個人認為網上各種文章對於二進位制處理講的過於囉嗦,做一下總結,看不懂的再去參考其它文章

javascript 以前不支援處理二進位制的,不知何時(自已去查)開始支援了,涉及的物件有以下幾個:

1. Blob: 二進位制資料型別的一個封裝

2. File: 繼承自Blob,多了一個屬性, input file 物件的 files 屬性的上傳檔案就是一個File物件

3. FileReader: 用於讀取 Blob 物件(還有沒有其它功能,還沒用過),通過 read 相關的方法 和 onload 事件非同步讀取一個Blob物件

4. Int8Array, Uint8Array, Int16Array, Int32Array 等二進位制陣列

5. ArrayBuffer: 一種記憶體檔案形式,屬於Blob中資料儲存成員型別,繼承了 Int8Array, Uint8Array, Int16Array, Int32Array

6. DataView: 用來讀取 ArrayBuffer

下面是我用於檔案上傳時轉base64的一個demo

<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
> <head> <title></title> <script language="javascript" type="text/javascript"> // <![CDATA[ function toBase64(arrayBuffer) { var binary = ''; var bytes = new Uint8Array(arrayBuffer); var len = bytes.byteLength;
for (var i = 0; i < len; i++) { binary += String.fromCharCode(bytes[i]); } return window.btoa(binary); } function Button1_onclick() { var file = File1.files[0]; var reader = new FileReader(); reader.readAsArrayBuffer(file); reader.onload = function (p) { if (p.target.readyState == FileReader.DONE) { var dataView = new DataView(p.target.result); var count = dataView.byteLength; var byteData = dataView.getUint8(0); //讀取第一個位元組 var bytes = new Uint8Array(p.target.result); //直接將結果轉換成一個位元組陣列 var base64 = toBase64(p.target.result); console.log(base64); } }; reader.onerror = function () { console.log('讀取失敗'); console.log(reader.error); } } // ]]> </script> </head> <body> <input id="File1" type="file" /> <input id="Button1" type="button" value="button" onclick="return Button1_onclick()" /> </body> </html>