asdass1 commited on
Commit
482498d
·
verified ·
1 Parent(s): 653aaea

Create crc32.js

Browse files
Files changed (1) hide show
  1. crc32.js +41 -0
crc32.js ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * 计算CRC32
3
+ * @param {ArrayBuffer} buffer - ArrayBuffer
4
+ */
5
+ export default buffer => {
6
+ buffer = new Uint8Array(buffer)
7
+ const module = {
8
+ polynom: 0xEDB88320,
9
+ initValue: -1,
10
+ bytes: 4,
11
+ table: []
12
+ }
13
+ for (let a = 0; a < 256; ++a) {
14
+ let b = a
15
+ for (let c = 0; c < 8; ++c) {
16
+ b = b & 1 ? module.polynom ^ (b >>> 1) : b >>> 1
17
+ }
18
+ module.table[a] = b >>> 0
19
+ }
20
+ let crc = module.initValue
21
+ let length = buffer.length
22
+ let table = module.table
23
+ for (let a = 0; a < 256; ++a) {
24
+ let b = a
25
+ for (let c = 0; c < 8; ++c) {
26
+ b = b & 1 ? module.polynom ^ (b >>> 1) : b >>> 1
27
+ }
28
+ module.table[a] = b >>> 0
29
+ }
30
+ for (let i = 0; i < length; ++i) {
31
+ crc = table[(crc ^ buffer[i]) & 0xFF] ^ (crc >>> 8)
32
+ }
33
+ crc ^= module.initValue
34
+ let HEX_CHARS = '0123456789abcdef'.split('');
35
+ let hex = '';
36
+ if (module.bytes > 2) {
37
+ hex += HEX_CHARS[(crc >> 28) & 0x0F] + HEX_CHARS[(crc >> 24) & 0x0F] + HEX_CHARS[(crc >> 20) & 0x0F] + HEX_CHARS[(crc >> 16) & 0x0F]
38
+ }
39
+ hex += HEX_CHARS[(crc >> 12) & 0x0F] + HEX_CHARS[(crc >> 8) & 0x0F] + HEX_CHARS[(crc >> 4) & 0x0F] + HEX_CHARS[crc & 0x0F]
40
+ return hex
41
+ }