作者lg31cm (我住5F)
看板CSSE
标题[问题] 看不太懂这个 CRC-16 code generation...
时间Sun Oct 29 18:41:30 2006
看不太懂这个 CRC-16 code generation...
/* x^16+x^12+x^5+1 */
int calcrc(ptr, count)
char *ptr;
int count;
{
int crc, i;
crc = 0;
while (--count >= 0)
{
crc = crc ^ (int)*ptr++ << 8;
for (i = 0; i < 8; ++i)
if (crc & 0x8000)
crc = crc << 1 ^ 0x1021;
else
crc = crc << 1;
}
return (crc & 0xFFFF);
}
手算我已经很熟习,不过看到这段 code 觉得有点神奇,我有把 count 以 1 带入
用手算过,跟手算的过程一样,但是用 > 1 带入过程就不一样了,总觉得背後应该
有个数学原理可以展开原手算的方法,然後才能写出这样的程式,不知道各位前辈
能不能指点一下,thank you!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.133.33.4