base64转二进制数组(ArrayBuffer) Javascript | 微信小程序
作者:广树 | 时间:2018-3-19 14:58:19 | 分类 : JavaScript/jQuery/Vue
在浏览器中我们可以使用如下代码将base64转换层二进制数组。
- function _base64ToArrayBuffer(base64) {
- var binary_string = window.atob(base64);
- var len = binary_string.length;
- var bytes = new Uint8Array( len );
- for (var i = 0; i < len; i++) {
- bytes[i] = binary_string.charCodeAt(i);
- }
- return bytes.buffer;
- }
如果是小程序中等没有window对象的话就不行了。
虽然小程序提供wx.base64ToArrayBuffer(base64),但是不知道为什么返回就是空。所以用如下代码来转换。
- var Base64Binary = {
- _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
- /* will return a Uint8Array type */
- decodeArrayBuffer: function(input) {
- var bytes = (input.length/4) * 3;
- var ab = new ArrayBuffer(bytes);
- this.decode(input, ab);
- return ab;
- },
- removePaddingChars: function(input){
- var lkey = this._keyStr.indexOf(input.charAt(input.length - 1));
- if(lkey == 64){
- return input.substring(0,input.length - 1);
- }
- return input;
- },
- decode: function (input, arrayBuffer) {
- //get last chars to see if are valid
- input = this.removePaddingChars(input);
- input = this.removePaddingChars(input);
- var bytes = parseInt((input.length / 4) * 3, 10);
- var uarray;
- var chr1, chr2, chr3;
- var enc1, enc2, enc3, enc4;
- var i = 0;
- var j = 0;
- if (arrayBuffer)
- uarray = new Uint8Array(arrayBuffer);
- else
- uarray = new Uint8Array(bytes);
- input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
- for (i=0; i<bytes; i+=3) {
- //get the 3 octects in 4 ascii chars
- enc1 = this._keyStr.indexOf(input.charAt(j++));
- enc2 = this._keyStr.indexOf(input.charAt(j++));
- enc3 = this._keyStr.indexOf(input.charAt(j++));
- enc4 = this._keyStr.indexOf(input.charAt(j++));
- chr1 = (enc1 << 2) | (enc2 >> 4);
- chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
- chr3 = ((enc3 & 3) << 6) | enc4;
- uarray[i] = chr1;
- if (enc3 != 64) uarray[i+1] = chr2;
- if (enc4 != 64) uarray[i+2] = chr3;
- }
- return uarray;
- }
- var uintArray = Base64Binary.decode(base64_string);
- var byteArray = Base64Binary.decodeArrayBuffer(base64_string);
赞一个6

2019-08-19 11:22