1 |
|
2 |
|
3 |
|
4 |
|
5 | export function u8aToNumber(value, { isNegative = false } = {}) {
|
6 | const count = value.length;
|
7 | if (isNegative) {
|
8 | let result = 0;
|
9 | switch (count) {
|
10 | case 0:
|
11 | return 0;
|
12 | case 1:
|
13 | result = value[0] ^ 255;
|
14 | break;
|
15 | case 2:
|
16 | result = (value[0] + (value[1] << 8)) ^ 65535;
|
17 | break;
|
18 | case 3:
|
19 | result = (value[0] + (value[1] << 8) + (value[2] << 16)) ^ 16777215;
|
20 | break;
|
21 | case 4:
|
22 |
|
23 |
|
24 | result = (value[0] + (value[1] << 8) + (value[2] << 16) + (value[3] * 16777216)) ^ 4294967295;
|
25 | break;
|
26 | case 5:
|
27 | result = ((value[0] + (value[1] << 8) + (value[2] << 16) + (value[3] * 16777216)) ^ 4294967295) + ((value[4] ^ 0xff) * 4294967296);
|
28 | break;
|
29 | case 6:
|
30 | result = ((value[0] + (value[1] << 8) + (value[2] << 16) + (value[3] * 16777216)) ^ 4294967295) + (((value[4] + (value[5] << 8)) ^ 65535) * 4294967296);
|
31 | break;
|
32 | default:
|
33 | throw new Error('Value more than 48-bits cannot be reliably converted');
|
34 | }
|
35 | return (result * -1) - 1;
|
36 | }
|
37 | switch (count) {
|
38 | case 0:
|
39 | return 0;
|
40 | case 1:
|
41 | return value[0];
|
42 | case 2:
|
43 | return value[0] + (value[1] << 8);
|
44 | case 3:
|
45 | return value[0] + (value[1] << 8) + (value[2] << 16);
|
46 | case 4:
|
47 |
|
48 |
|
49 | return value[0] + (value[1] << 8) + (value[2] << 16) + (value[3] * 16777216);
|
50 | case 5:
|
51 | return value[0] + (value[1] << 8) + (value[2] << 16) + ((value[3] + (value[4] << 8)) * 16777216);
|
52 | case 6:
|
53 | return value[0] + (value[1] << 8) + (value[2] << 16) + ((value[3] + (value[4] << 8) + (value[5] << 16)) * 16777216);
|
54 | default:
|
55 | throw new Error('Value more than 48-bits cannot be reliably converted');
|
56 | }
|
57 | } |
\ | No newline at end of file |