0
CRC校驗和的機制或步驟很容易,但軟件在某種程度上很多complicated和軟件中有一些步驟不兼容CRC的步驟 下面的圖片是步驟用於獲取CRC的校驗和(其僅僅是一個模2分割):CRC代碼和實現兼容性
的校驗和是餘數= 001
用於計算CRC校驗和的軟件是用於比特串是:
/*
* The width of the CRC calculation and result.
* Modify the typedef for a 16 or 32-bit CRC standard.
*/
typedef uint8_t crc;
#define WIDTH (8 * sizeof(crc))
#define TOPBIT (1 << (WIDTH - 1))
crc
crcSlow(uint8_t const message[], int nBytes)
{
crc remainder = 0;
/*
* Perform modulo-2 division, a byte at a time.
*/
for (int byte = 0; byte < nBytes; ++byte)
{
/*
* Bring the next byte into the remainder.
*/
remainder ^= (message[byte] << (WIDTH - 8));
/*
* Perform modulo-2 division, a bit at a time.
*/
for (uint8_t bit = 8; bit > 0; --bit)
{
/*
* Try to divide the current data bit.
*/
if (remainder & TOPBIT)
{
remainder = (remainder << 1)^POLYNOMIAL;
}
else
{
remainder = (remainder << 1);
}
}
}
/*
* The final remainder is the CRC result.
*/
return (remainder);
}
我看到有不兼容性在part(remainder<<1)
的軟件,因爲這些移動將始終在正確的加0,即使下面的位不爲0
,並在部分: remainder ^= (message[byte] << (WIDTH - 8));
把我穿上」的第一個字節時t看到的問題,因爲初始值是因爲初始值爲0,但是當插入下一個字節時,爲什麼我們將它們的每個字節與先前的餘數相比較
沒有** ** CRC。有非常不同的CRC算法。閱讀[問]並按照建議。 – Olaf
什麼是「模2分」? CRC不是。有一些好的文章描述了CRC的概念及其實現。你還應該閱讀[問]!哦,你的代碼可以調用'int'和'crc'的sizese組合的未定義行爲。 – Olaf