@@ 72-112 (lines=41) @@ | ||
69 | return string_to_bytes( atob( str ) ); |
|
70 | } |
|
71 | ||
72 | function bytes_to_string ( bytes, utf8 ) { |
|
73 | utf8 = !!utf8; |
|
74 | ||
75 | var len = bytes.length, |
|
76 | chars = new Array(len); |
|
77 | ||
78 | for ( var i = 0, j = 0; i < len; i++ ) { |
|
79 | var b = bytes[i]; |
|
80 | if ( !utf8 || b < 128 ) { |
|
81 | chars[j++] = b; |
|
82 | } |
|
83 | else if ( b >= 192 && b < 224 && i+1 < len ) { |
|
84 | chars[j++] = ( (b & 0x1f) << 6 ) | (bytes[++i] & 0x3f); |
|
85 | } |
|
86 | else if ( b >= 224 && b < 240 && i+2 < len ) { |
|
87 | chars[j++] = ( (b & 0xf) << 12 ) | ( (bytes[++i] & 0x3f) << 6 ) | (bytes[++i] & 0x3f); |
|
88 | } |
|
89 | else if ( b >= 240 && b < 248 && i+3 < len ) { |
|
90 | var c = ( (b & 7) << 18 ) | ( (bytes[++i] & 0x3f) << 12 ) | ( (bytes[++i] & 0x3f) << 6 ) | (bytes[++i] & 0x3f); |
|
91 | if ( c <= 0xffff ) { |
|
92 | chars[j++] = c; |
|
93 | } |
|
94 | else { |
|
95 | c ^= 0x10000; |
|
96 | chars[j++] = 0xd800 | (c >> 10); |
|
97 | chars[j++] = 0xdc00 | (c & 0x3ff); |
|
98 | } |
|
99 | } |
|
100 | else { |
|
101 | throw new Error("Malformed UTF8 character at byte offset " + i); |
|
102 | } |
|
103 | } |
|
104 | ||
105 | var str = '', |
|
106 | bs = 16384; |
|
107 | for ( var i = 0; i < j; i += bs ) { |
|
108 | str += String.fromCharCode.apply( String, chars.slice( i, i+bs <= j ? i+bs : j ) ); |
|
109 | } |
|
110 | ||
111 | return str; |
|
112 | } |
|
113 | ||
114 | function bytes_to_hex ( arr ) { |
|
115 | var str = ''; |
@@ 24-39 (lines=16) @@ | ||
21 | } |
|
22 | return s.subarray(0, i); |
|
23 | } |
|
24 | function i(e) { |
|
25 | return btoa(function(e, t) { |
|
26 | t = !!t; |
|
27 | for (var r = e.length, s = new Array(r), c = 0, i = 0; c < r; c++) { |
|
28 | var a = e[c]; |
|
29 | if (!t || a < 128) s[i++] = a; else if (a >= 192 && a < 224 && c + 1 < r) s[i++] = (31 & a) << 6 | 63 & e[++c]; else if (a >= 224 && a < 240 && c + 2 < r) s[i++] = (15 & a) << 12 | (63 & e[++c]) << 6 | 63 & e[++c]; else { |
|
30 | if (!(a >= 240 && a < 248 && c + 3 < r)) throw new Error("Malformed UTF8 character at byte offset " + c); |
|
31 | var n = (7 & a) << 18 | (63 & e[++c]) << 12 | (63 & e[++c]) << 6 | 63 & e[++c]; |
|
32 | n <= 65535 ? s[i++] = n : (n ^= 65536, s[i++] = 55296 | n >> 10, s[i++] = 56320 | 1023 & n); |
|
33 | } |
|
34 | } |
|
35 | var h = ""; |
|
36 | for (c = 0; c < i; c += 16384) h += String.fromCharCode.apply(String, s.slice(c, c + 16384 <= i ? c + 16384 : i)); |
|
37 | return h; |
|
38 | }(e)); |
|
39 | } |
|
40 | function a(e) { |
|
41 | return "string" == typeof e; |
|
42 | } |