1 |
|
2 |
|
3 | const U8 = new Array(256);
|
4 | const U16 = new Array(256 * 256);
|
5 |
|
6 | for (let n = 0; n < 256; n++) {
|
7 | U8[n] = n.toString(16).padStart(2, '0');
|
8 | }
|
9 |
|
10 | for (let i = 0; i < 256; i++) {
|
11 | const s = i << 8;
|
12 |
|
13 | for (let j = 0; j < 256; j++) {
|
14 | U16[s | j] = U8[i] + U8[j];
|
15 | }
|
16 | }
|
17 |
|
18 |
|
19 |
|
20 | function hex(value) {
|
21 | const mod = value.length % 2;
|
22 | const length = value.length - mod;
|
23 | const dv = new DataView(value.buffer, value.byteOffset);
|
24 | let result = '';
|
25 |
|
26 | for (let i = 0; i < length; i += 2) {
|
27 |
|
28 |
|
29 | result += U16[dv.getUint16(i)];
|
30 | }
|
31 |
|
32 | if (mod) {
|
33 | result += U8[dv.getUint8(length)];
|
34 | }
|
35 |
|
36 | return result;
|
37 | }
|
38 |
|
39 |
|
40 |
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 |
|
47 |
|
48 |
|
49 |
|
50 |
|
51 |
|
52 |
|
53 |
|
54 | export function u8aToHex(value, bitLength = -1, isPrefixed = true) {
|
55 | const length = Math.ceil(bitLength / 8);
|
56 | return `${isPrefixed ? '0x' : ''}${!value || !value.length ? '' : bitLength > 0 && value.length > length ? `${hex(value.subarray(0, length / 2))}…${hex(value.subarray(value.length - length / 2))}` : hex(value)}`;
|
57 | } |
\ | No newline at end of file |