迴圈冗餘檢驗(CRC)求幀檢驗序列(FCS)
阿新 • • 發佈:2019-01-22
#include <stdio.h> #include <stdint.h> /** * 迴圈冗餘檢驗(CRC),求幀檢驗序列(FCS) * 引數:M是待傳送的資料 * p是除數 * 返回:幀檢驗序列(FCS) * 說明:都是從0開始編號。 */ uint32_t getFCS(uint32_t M, uint32_t p) { uint32_t tmp; uint8_t plen = 0, Mlen = 0; int8_t i; tmp = p; //獲取p的有效長度 while (tmp) { tmp >>= 1; plen++; } tmp = M; //獲取M的有效長度 while (tmp) { tmp >>= 1; Mlen++; } M <<= (plen - 1); //得到被除數 /* for (i = Mlen + plen-1 - 1; i >= plen - 1; i--) { if (M & (1 << i)) { //如果M的倒數第i位是1 M ^= p << (i - (plen - 1)); } } */ for (i = Mlen - 1; i >= 0; i--) { if (M & (1 << (i + plen - 1))) { M ^= p << i; } } return M; } void main() { printf("%X\n", getFCS(0b101001, 0b1101)); //書上例題 printf("%X\n", getFCS(0b1101011011, 0b10011)); //課後習題 }