2 #ifndef vul_checksum_h_ 3 #define vul_checksum_h_ 12 #include <vxl_config.h> 40 inline vxl_uint_32 byte_swap (vxl_uint_32 val)
42 val = ((val << 8) & 0xFF00FF00 ) | ((val >> 8) & 0xFF00FF );
43 return (val << 16) | (val >> 16);
49 inline vxl_uint_32 to_bigendian( vxl_uint_32 val )
51 return byte_swap (val);
55 inline vxl_uint_32 to_bigendian( vxl_uint_32 val )
64 inline char bit_reverse(
char b)
66 return (
char)((((
unsigned char)(b) * 0x0202020202ULL) & 0x010884422010ULL) % 1023);
72 template <
class IT> vxl_uint_32 vul_checksum_crc32x(IT p, IT end, vxl_uint_32 quotient)
74 vxl_uint_32 result=-1;
81 octet = bit_reverse(*(p++));
82 for (
unsigned j=0; j<8; j++)
84 if ((octet >> 7) ^ (result >> 31))
85 result = (result << 1) ^ quotient;
87 result = (result << 1);
94 char* result_carray = reinterpret_cast<char*>(&result);
95 result_carray[0] = bit_reverse(result_carray[0]);
96 result_carray[1] = bit_reverse(result_carray[1]);
97 result_carray[2] = bit_reverse(result_carray[2]);
98 result_carray[3] = bit_reverse(result_carray[3]);
109 return vul_checksum_crc32x(begin, end, 0x1EDC6F41);
115 return vul_checksum_crc32x(begin, end, 0x04c11db7);
117 #endif // vul_checksum_h_ vxl_uint_32 vul_checksum_crc32(IT begin, IT end)
Caluclate the popular CRC32 checksum as used by SATA, MPEG-2, PKZIP, Gzip, Bzip2.
vxl_uint_32 vul_checksum_crc32c(IT begin, IT end)
Caluclate the recommended CRC32C checksum.