-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathutil.js
More file actions
59 lines (54 loc) · 1.18 KB
/
util.js
File metadata and controls
59 lines (54 loc) · 1.18 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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/**
* @param {Uint8Array[]} buffers
* @returns {Uint8Array}
*/
export function concat (buffers) {
if (!buffers.length) {
return new Uint8Array(0)
}
let length = 0
for (let i = 0; i < buffers.length; i++) {
length += buffers[i].length
}
const ret = new Uint8Array(length)
let pos = 0
for (let i = 0; i < buffers.length; i++) {
ret.set(buffers[i], pos)
pos += buffers[i].length
}
return ret
}
// from https://github.com/feross/buffer, thanks
const hexSliceLookupTable = (function () {
const alphabet = '0123456789abcdef'
const table = new Array(256)
for (let i = 0; i < 16; ++i) {
const i16 = i * 16
for (let j = 0; j < 16; ++j) {
table[i16 + j] = alphabet[i] + alphabet[j]
}
}
return table
})()
/**
* @param {Uint8Array} buf
* @returns {string}
*/
export function toHex (buf) {
let ret = ''
for (let i = 0; i < buf.length; i++) {
ret += hexSliceLookupTable[buf[i]]
}
return ret
}
/**
* @param {string} hex
* @returns {Uint8Array}
*/
export function fromHex (hex) {
const buf = new Uint8Array(hex.length / 2)
for (let i = 0; i < hex.length / 2; i++) {
buf[i] = parseInt(hex.substr(i * 2, 2), 16)
}
return buf
}