You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+14-6Lines changed: 14 additions & 6 deletions
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
-
# Uint8Array to/from base64
1
+
# Uint8Array to/from base64 and hex
2
2
3
-
base64 is a common way to represent arbitrary binary data as ASCII. JavaScript has Uint8Arrays to work with binary data, but no built-in mechanism to encode that data as base64, nor to take base64'd data and produce a corresponding Uint8Arrays. This is a proposal to fix that.
3
+
base64 is a common way to represent arbitrary binary data as ASCII. JavaScript has Uint8Arrays to work with binary data, but no built-in mechanism to encode that data as base64, nor to take base64'd data and produce a corresponding Uint8Arrays. This is a proposal to fix that. It also adds methods for converting between hex strings and Uint8Arrays.
4
4
5
5
It is currently at Stage 1 of [the TC39 process](https://tc39.es/process-document/).
6
6
@@ -14,24 +14,32 @@ Initial spec text is available [here](https://tc39.github.io/proposal-arraybuffe
This would add `Uint8Array.prototype.toBase64` and `Uint8Array.fromBase64` methods. The latter would throw if given a string which is not properly base64 encoded.
31
+
This would add `Uint8Array.prototype.toBase64`/`Uint8Array.prototype.toHex` and `Uint8Array.fromBase64`/`Uint8Array.fromHex` methods. The latter pair would throw if given a string which is not properly encoded.
26
32
27
33
## Options
28
34
29
-
An options bag argument could allow specifying additional details such as the alphabet (to include at least `base64` and `base64url`), whether to generate / enforce padding, and how to handle whitespace.
35
+
An options bag argument for the base64 methods could allow specifying additional details such as the alphabet (to include at least `base64` and `base64url`), whether to generate / enforce padding, and how to handle whitespace.
30
36
31
37
## Streaming API
32
38
33
39
Additional `toPartialBase64` and `fromPartialBase64` methods would allow working with chunks of base64, at the cost of more complexity. See [the playground](https://tc39.github.io/proposal-arraybuffer-base64/) linked above for examples.
34
40
41
+
Streaming versions of the hex APIs are not included since they are straightforward to do manually.
42
+
35
43
See [issue #13](https://github.com/tc39/proposal-arraybuffer-base64/issues/13) for discussion.
36
44
37
45
## Questions
@@ -44,7 +52,7 @@ Possibly we should have asynchronous versions for working with large data. That
44
52
45
53
### What other encodings should be included, if any?
46
54
47
-
I think hex makes sense, and no others. Hex is not yet implemented in the playground. The current plan is for new encodings to be added as seperate methods.
55
+
I think base64 and hex are the only encodings which make sense, and those are currently included.
48
56
49
57
See issues [#7](https://github.com/tc39/proposal-arraybuffer-base64/issues/7), [#8](https://github.com/tc39/proposal-arraybuffer-base64/issues/8), and [#11](https://github.com/tc39/proposal-arraybuffer-base64/issues/11).
50
58
@@ -62,6 +70,6 @@ That's also been the consensus when it's come up [previously](https://discourse.
62
70
63
71
Uint8Arrays can be partial views of an underlying buffer, so you can create such a view and invoke `.toBase64` on it.
64
72
65
-
### What if I want to decode a Base64 string into an existing Typed Array or ArrayBuffer?
73
+
### What if I want to decode a Base64 or hex string into an existing Typed Array or ArrayBuffer?
66
74
67
75
While that is a reasonable things to want, I think it need not be included in the initial version of this API. We can add it later if demand proves high. Until then, copying slices of memory (e.g. using `target.set(chunk, offset)`) is quite fast.
0 commit comments