FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
JavaScript/Conversions/Base64ToArrayBuffer.js at master · TheAlgorithms/JavaScript · GitHub
Uh oh!
There was an error while loading.
Please reload this page
.
TheAlgorithms
/
JavaScript
Public
Uh oh!
There was an error while loading.
Please reload this page
.
Notifications
You must be signed in to change notification settings
Fork
5.8k
Star
34.2k
Code
Issues
21
Pull requests
192
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Issues
Pull requests
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
JavaScript
/
Conversions
/
Base64ToArrayBuffer.js
Copy path
More file actions
More file actions
Latest commit
History
History
History
48 lines (41 loc) · 1.89 KB
Breadcrumbs
JavaScript
/
Conversions
/
Base64ToArrayBuffer.js
Copy path
File metadata and controls
48 lines (41 loc) · 1.89 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
44
45
46
47
48
// About base64: https://en.wikipedia.org/wiki/Base64
/**
* Converts a base64 string to an array of bytes
*
@param
{
string
} b64 A base64 string
*
@returns
{
ArrayBuffer
} An ArrayBuffer representing the bytes encoded by the base64 string
*/
function
base64ToBuffer
(
b64
)
{
// The base64 encoding uses the following set of characters to encode any binary data as text
const
base64Table
=
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
// Find the index of char '=' first occurrence
const
paddingIdx
=
b64
.
indexOf
(
'='
)
// Remove padding chars from base64 string, if there are any
const
b64NoPadding
=
paddingIdx
!==
-
1
?
b64
.
slice
(
0
,
paddingIdx
)
:
b64
// Calculate the length of the result buffer
const
bufferLength
=
Math
.
floor
(
(
b64NoPadding
.
length
*
6
)
/
8
)
// Create the result buffer
const
result
=
new
ArrayBuffer
(
bufferLength
)
// Create an instance of Uint8Array, to write to the `result` buffer
const
byteView
=
new
Uint8Array
(
result
)
// Loop through all chars in the base64 string, in increments of 4 chars, and in increments of 3 bytes
for
(
let
i
=
0
,
j
=
0
;
i
<
b64NoPadding
.
length
;
i
+=
4
,
j
+=
3
)
{
// Get the index of the next 4 base64 chars
const
b64Char1
=
base64Table
.
indexOf
(
b64NoPadding
[
i
]
)
const
b64Char2
=
base64Table
.
indexOf
(
b64NoPadding
[
i
+
1
]
)
let
b64Char3
=
base64Table
.
indexOf
(
b64NoPadding
[
i
+
2
]
)
let
b64Char4
=
base64Table
.
indexOf
(
b64NoPadding
[
i
+
3
]
)
// If base64 chars 3 and 4 don't exit, then set them to 0
if
(
b64Char3
===
-
1
)
b64Char3
=
0
if
(
b64Char4
===
-
1
)
b64Char4
=
0
// Calculate the next 3 bytes
const
byte1
=
(
b64Char1
<<
2
)
+
(
(
b64Char2
&
48
)
>>
4
)
const
byte2
=
(
(
b64Char2
&
15
)
<<
4
)
+
(
(
b64Char3
&
60
)
>>
2
)
const
byte3
=
(
(
b64Char3
&
3
)
<<
6
)
+
b64Char4
byteView
[
j
]
=
byte1
byteView
[
j
+
1
]
=
byte2
byteView
[
j
+
2
]
=
byte3
}
return
result
}
export
{
base64ToBuffer
}
Back
|
FazBrowse Home
|
New Git URL