title: Arduino CRC calculation and Serial reading
body: <p>I have a string : <strong>":0100000035"</strong> that I sent from Android to Arduino via bluetooth, In Android the CRC of this string is : E9601FB</p>
  
  <p>In my sketch the CRC calculation function is :</p>
  
  <pre><code>static PROGMEM prog_uint32_t crc_table[16] = {
      0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
      0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
      0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
      0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
  };
  
  unsigned long crc_update(unsigned long crc, byte data)
  {
      byte tbl_idx;
      tbl_idx = crc ^ (data &gt;&gt; (0 * 4));
      crc = pgm_read_dword_near(crc_table + (tbl_idx &amp; 0x0f)) ^ (crc &gt;&gt; 4);
      tbl_idx = crc ^ (data &gt;&gt; (1 * 4));
      crc = pgm_read_dword_near(crc_table + (tbl_idx &amp; 0x0f)) ^ (crc &gt;&gt; 4);
      return crc;
  }
  
  unsigned long crc_string(char *s)
  {
    unsigned long crc = ~0L;
    while (*s)
      crc = crc_update(crc, *s++);
    crc = ~crc;
    return crc;
  }
  </code></pre>
  
  <p>the reading loop constructs a char array : <code>char[11] bufferline</code>
  <code>bufferline = ":0100000035"</code></p>
  
  <p>but when I print the CRC <code>Serial.println(crc_string(bufferline), HEX);</code> it gives : F1D51E33
  and if I do like this : <code>Serial.println(crc_string(":0100000035"), HEX);</code> it gives the right CRC : E9601FB</p>
  
  <p>Am I missing anything ?</p>
  
  <p>Thanks</p>