這個轉換是否正確嗎?Fletcher校驗和從32bit重新編碼爲8
uint8_t fletcher8(uint8_t *data, uint8_t len)
{
uint8_t sum1 = 0xff, sum2 = 0xff;
while (len) {
unsigned tlen = len > 360 ? 360 : len;
len -= tlen;
do {
sum1 += *data++;
sum2 += sum1;
tlen -= sizeof(uint8_t);
} while (tlen);
sum1 = (sum1 & 0xff) + (sum1 >> 4);
sum2 = (sum2 & 0xff) + (sum2 >> 4);
}
/* Second reduction step to reduce sums to 4 bits */
sum1 = (sum1 & 0xff) + (sum1 >> 4);
sum2 = (sum2 & 0xff) + (sum2 >> 4);
return sum2 << 4 | sum1;
}
原文:
uint32_t fletcher32(uint16_t *data, size_t len)
{
uint32_t sum1 = 0xffff, sum2 = 0xffff;
while (len) {
unsigned tlen = len > 360 ? 360 : len;
len -= tlen;
do {
sum1 += *data++;
sum2 += sum1;
tlen -= sizeof(uint16_t);
} while (tlen);
sum1 = (sum1 & 0xffff) + (sum1 >> 16);
sum2 = (sum2 & 0xffff) + (sum2 >> 16);
}
/* Second reduction step to reduce sums to 16 bits */
sum1 = (sum1 & 0xffff) + (sum1 >> 16);
sum2 = (sum2 & 0xffff) + (sum2 >> 16);
return sum2 << 16 | sum1;
}
LEN將是8
數據將數據的[]輸入(1 - 8)
其實我也不知道是什麼處理該行:unsigned tlen = len> 360? 360:len;
也許 - > int8_t tlen = len> 255? 255:len;
您的代碼似乎來自維基百科。您至少應該明確此來源,因爲該材料受[CC-BY-SA許可證](http://en.wikipedia.org/wiki/Wikipedia:CC-BY-SA)的約束。您必須將代碼歸因於其作者。 – MvG