···150150 set_u8 b (off + i) (v lsr (8 * (len - 1 - i)))
151151 done
152152153153-(* {1 CRC-16-CCITT} *)
154154-155155-let crc16_ccitt_table =
156156- let table = Array.make 256 0 in
157157- for i = 0 to 255 do
158158- let crc = ref (i lsl 8) in
159159- for _ = 0 to 7 do
160160- if !crc land 0x8000 <> 0 then crc := (!crc lsl 1) lxor 0x1021
161161- else crc := !crc lsl 1
162162- done;
163163- table.(i) <- !crc land 0xFFFF
164164- done;
165165- table
166166-167167-let compute_crc16 data =
168168- let crc = ref 0xFFFF in
169169- for i = 0 to String.length data - 1 do
170170- let byte = Char.code data.[i] in
171171- let idx = (!crc lsr 8) lxor byte land 0xFF in
172172- crc := (!crc lsl 8) lxor crc16_ccitt_table.(idx) land 0xFFFF
173173- done;
174174- !crc
175175-176176-(* {1 CRC-32 (ISO 3309)} *)
177177-178178-let crc32_table =
179179- let table = Array.make 256 0l in
180180- for i = 0 to 255 do
181181- let crc = ref (Int32.of_int i) in
182182- for _ = 0 to 7 do
183183- if Int32.logand !crc 1l <> 0l then
184184- crc := Int32.logxor (Int32.shift_right_logical !crc 1) 0xEDB88320l
185185- else crc := Int32.shift_right_logical !crc 1
186186- done;
187187- table.(i) <- !crc
188188- done;
189189- table
190190-191191-let compute_crc32 data =
192192- let crc = ref 0xFFFFFFFFl in
193193- for i = 0 to String.length data - 1 do
194194- let byte = Char.code data.[i] in
195195- let idx =
196196- Int32.to_int (Int32.logand (Int32.logxor !crc (Int32.of_int byte)) 0xFFl)
197197- in
198198- crc := Int32.logxor (Int32.shift_right_logical !crc 8) crc32_table.(idx)
199199- done;
200200- Int32.to_int (Int32.logxor !crc 0xFFFFFFFFl) land 0xFFFFFFFF
153153+let compute_crc16 = Crc.crc16_ccitt
154154+let compute_crc32 = Crc.crc32
201155202156(* {1 Header decoding} *)
203157