我有一個字符串:「:0100000035」,我從安卓發送到通過藍牙Arduino的,在Android中該字符串的CRC是:E9601FBArduino的CRC計算和串行讀
在我的素描CRC計算功能是:
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 >> (0 * 4));
crc = pgm_read_dword_near(crc_table + (tbl_idx & 0x0f))^(crc >> 4);
tbl_idx = crc^(data >> (1 * 4));
crc = pgm_read_dword_near(crc_table + (tbl_idx & 0x0f))^(crc >> 4);
return crc;
}
unsigned long crc_string(char *s)
{
unsigned long crc = ~0L;
while (*s)
crc = crc_update(crc, *s++);
crc = ~crc;
return crc;
}
讀取循環構造一個字符數組:char[11] bufferline
bufferline = ":0100000035"
但是當我打印CRC Serial.println(crc_string(bufferline), HEX);
它給出:F1D51E33 ,如果我這樣做:Serial.println(crc_string(":0100000035"), HEX);
它給出了正確的CRC:E9601FB
我錯過了什麼嗎?
由於
您可以決定使用該代碼的語言嗎? –
這是寫在C我認爲這不是我的長處。我懷疑轉換問題從字節到字符 – Houssem