Main MRPT website > C++ reference for MRPT 1.9.9
crc.cpp
Go to the documentation of this file.
1 /* +------------------------------------------------------------------------+
2  | Mobile Robot Programming Toolkit (MRPT) |
3  | http://www.mrpt.org/ |
4  | |
5  | Copyright (c) 2005-2017, Individual contributors, see AUTHORS file |
6  | See: http://www.mrpt.org/Authors - All rights reserved. |
7  | Released under BSD License. See details in http://www.mrpt.org/License |
8  +------------------------------------------------------------------------+ */
9 
10 #include "base-precomp.h" // Precompiled headers
11 
12 #include <mrpt/utils/crc.h>
13 
14 using namespace mrpt::utils;
15 using namespace std;
16 
17 /*---------------------------------------------------------------
18  CRC16
19  ---------------------------------------------------------------*/
21  const std::vector<uint8_t>& data, const uint16_t gen_pol)
22 {
23  return compute_CRC16(&data[0], data.size(), gen_pol);
24 }
25 
27  const std::vector<uint8_t>& data, const uint32_t gen_pol)
28 {
29  return compute_CRC32(&data[0], data.size(), gen_pol);
30 }
31 
32 /*---------------------------------------------------------------
33  CRC16
34  ---------------------------------------------------------------*/
36  const uint8_t* data, const size_t len_, const uint16_t gen_pol)
37 {
38  uint16_t uCrc16;
39  uint8_t abData[2];
40 
41  size_t len = len_;
42 
43  uCrc16 = 0;
44  abData[0] = 0;
45 
46  while (len--)
47  {
48  abData[1] = abData[0];
49  abData[0] = *data++;
50 
51  if (uCrc16 & 0x8000)
52  {
53  uCrc16 = (uCrc16 & 0x7fff) << 1;
54  uCrc16 ^= gen_pol;
55  }
56  else
57  {
58  uCrc16 <<= 1;
59  }
60  uCrc16 ^= (abData[0] | (abData[1] << 8));
61  }
62  return uCrc16;
63 }
64 
65 unsigned long CRC32Value(int i, const uint32_t CRC32_POLYNOMIAL)
66 {
67  unsigned long ulCRC = i;
68  for (int j = 8; j > 0; j--)
69  {
70  if (ulCRC & 1)
71  ulCRC = (ulCRC >> 1) ^ CRC32_POLYNOMIAL;
72  else
73  ulCRC >>= 1;
74  }
75  return ulCRC;
76 }
77 
79  const uint8_t* data, const size_t len_, const uint32_t gen_pol)
80 {
81  size_t len = len_;
82  unsigned long ulCRC = 0;
83  while (len-- != 0)
84  {
85  unsigned long ulTemp1 = (ulCRC >> 8) & 0x00FFFFFFL;
86  unsigned long ulTemp2 =
87  CRC32Value(((int)ulCRC ^ *data++) & 0xff, gen_pol);
88  ulCRC = ulTemp1 ^ ulTemp2;
89  }
90  return ulCRC;
91 }
Classes for serialization, sockets, ini-file manipulation, streams, list of properties-values, timewatch, extensions to STL.
unsigned __int16 uint16_t
Definition: rptypes.h:44
STL namespace.
GLenum GLsizei len
Definition: glext.h:4712
unsigned char uint8_t
Definition: rptypes.h:41
uint16_t compute_CRC16(const std::vector< uint8_t > &data, const uint16_t gen_pol=0x8005)
Computes the CRC16 checksum of a block of data.
Definition: crc.cpp:20
unsigned long CRC32Value(int i, const uint32_t CRC32_POLYNOMIAL)
Definition: crc.cpp:65
uint32_t compute_CRC32(const std::vector< uint8_t > &data, const uint32_t gen_pol=0xEDB88320L)
Computes the CRC32 checksum of a block of data.
Definition: crc.cpp:26
unsigned __int32 uint32_t
Definition: rptypes.h:47
GLsizei GLsizei GLenum GLenum const GLvoid * data
Definition: glext.h:3546



Page generated by Doxygen 1.8.14 for MRPT 1.9.9 Git: ae4571287 Thu Nov 23 00:06:53 2017 +0100 at dom oct 27 23:51:55 CET 2019