Browse Source

修正crc计算的bug

zzj 6 years ago
parent
commit
594b7137d1
1 changed files with 20 additions and 3 deletions
  1. 20 3
      crc.cpp

+ 20 - 3
crc.cpp

@@ -35,20 +35,18 @@ static unsigned short ccitt_table[256] = {
 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,
 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0
 };
-
 unsigned short do_crc(unsigned char *q, int len)
 {
 	unsigned short crc = 0;
 
 	while (len-- > 0)
-		crc = ccitt_table[(crc >> 8 ^ *q++) & 0xff] ^ (crc << 8);
+		crc = ccitt_table[((crc >> 8) ^ *q++) & 0xff] ^ (crc << 8);
 
 	return crc;
 }
 
 
 /*
-
 ----------------------------------------------
 --功能: 字节查表法求CRC
 ---------------------------------------------
@@ -67,4 +65,23 @@ uint16_t do_crc(unsigned char *ptr,int len) // 字节查表法求CRC
 	}
 	return(crc);
 }
+
+
+	uint16_t do_crc(uint8_t* pbtData, int nLength)
+	{
+		//查表(crc_Table)法求CRC
+		uint8_t tda;
+		uint16_t crc = 0;
+		int i = 0;
+		while (i < nLength)
+		{
+			tda = (uint8_t)(crc / 256); // 以8 位二进制数暂存CRC 的高8 位
+			crc <<= 8;				// 左移8 位
+			crc ^= ccitt_table[tda^pbtData[i++]]; // 高字节和当前数据XOR 再查表
+		}
+
+		return(crc);
+	}
 */
+
+