精華區beta CSSE 關於我們 聯絡資訊
看不太懂這個 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