forked from TheAlgorithms/JavaScript
- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathArrayBufferToBase64.js
More file actions
Latest commit
43 lines (37 loc) · 1.54 KB
/
Copy pathArrayBufferToBase64.js
File metadata and controls
43 lines (37 loc) · 1.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// About base64: https://en.wikipedia.org/wiki/Base64
/**
* Converts an array of bytes to base64 encoding
* @param {ArrayBuffer} binaryData An ArrayBuffer which represents an array of bytes
* @returns {string} A string containing the base64 encoding of `binaryData`
*/
functionbufferToBase64(binaryData){
// The base64 encoding uses the following set of characters to encode any binary data as text
constbase64Table=
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
// Every 3 bytes translates to 4 base64 characters, if we have less than 3 bytes we must append '=' chars as padding
constpadding=3-(binaryData.byteLength%3)
// Create an instance of Uint8Array, to read from the binaryData array buffer
constbyteView=newUint8Array(binaryData)
letresult=''
// Loop through all bytes in the buffer, in increments of 3 bytes
for(leti=0;i<byteView.byteLength;i+=3){
// Get the index for the next 4 base64 chars
constchar1=(byteView[i]&252)>>2
constchar2=((byteView[i]&3)<<4)+((byteView[i+1]&240)>>4)
constchar3=((byteView[i+1]&15)<<2)+((byteView[i+2]&192)>>6)
constchar4=byteView[i+2]&63
result+=
base64Table[char1]+
base64Table[char2]+
base64Table[char3]+
base64Table[char4]
}
// Add padding '=' chars if needed
if(padding!==3){
constpaddedResult=
result.slice(0,result.length-padding)+'='.repeat(padding)
returnpaddedResult
}
returnresult
}
export{bufferToBase64}