在浏览器中我们可以使用如下代码将base64转换层二进制数组。


  1. function _base64ToArrayBuffer(base64) {
  2. var binary_string = window.atob(base64);
  3. var len = binary_string.length;
  4. var bytes = new Uint8Array( len );
  5. for (var i = 0; i < len; i++) {
  6. bytes[i] = binary_string.charCodeAt(i);
  7. }
  8. return bytes.buffer;
  9. }


如果是小程序中等没有window对象的话就不行了。

虽然小程序提供wx.base64ToArrayBuffer(base64),但是不知道为什么返回就是空。所以用如下代码来转换。


  1. var Base64Binary = {
  2. _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
  3. /* will return a Uint8Array type */
  4. decodeArrayBuffer: function(input) {
  5. var bytes = (input.length/4) * 3;
  6. var ab = new ArrayBuffer(bytes);
  7. this.decode(input, ab);
  8. return ab;
  9. },
  10.  
  11. removePaddingChars: function(input){
  12. var lkey = this._keyStr.indexOf(input.charAt(input.length - 1));
  13. if(lkey == 64){
  14. return input.substring(0,input.length - 1);
  15. }
  16. return input;
  17. },
  18.  
  19. decode: function (input, arrayBuffer) {
  20. //get last chars to see if are valid
  21. input = this.removePaddingChars(input);
  22. input = this.removePaddingChars(input);
  23.  
  24. var bytes = parseInt((input.length / 4) * 3, 10);
  25. var uarray;
  26. var chr1, chr2, chr3;
  27. var enc1, enc2, enc3, enc4;
  28. var i = 0;
  29. var j = 0;
  30. if (arrayBuffer)
  31. uarray = new Uint8Array(arrayBuffer);
  32. else
  33. uarray = new Uint8Array(bytes);
  34. input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
  35. for (i=0; i<bytes; i+=3) {
  36. //get the 3 octects in 4 ascii chars
  37. enc1 = this._keyStr.indexOf(input.charAt(j++));
  38. enc2 = this._keyStr.indexOf(input.charAt(j++));
  39. enc3 = this._keyStr.indexOf(input.charAt(j++));
  40. enc4 = this._keyStr.indexOf(input.charAt(j++));
  41. chr1 = (enc1 << 2) | (enc2 >> 4);
  42. chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
  43. chr3 = ((enc3 & 3) << 6) | enc4;
  44. uarray[i] = chr1;
  45. if (enc3 != 64) uarray[i+1] = chr2;
  46. if (enc4 != 64) uarray[i+2] = chr3;
  47. }
  48. return uarray;
  49. }
  50.  
  51. var uintArray = Base64Binary.decode(base64_string);
  52. var byteArray = Base64Binary.decodeArrayBuffer(base64_string);