이 변환은 원본과 동일합니까?32 비트에서 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;
}
렌은 []의 데이터를 입력해야합니다 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