Two's Complement Checksum

Başlatan baran123, 04 Eylül 2017, 17:58:46

baran123

Dursun lazım olur:)

uint8_t CheckSumControl(uint8_t dataArray[], uint8_t len, uint8_t chk)
{
    uint8_t i;
    uint8_t checkSum = 0;
    uint8_t result = 0;
    uint32_t tmp = 0;
    
    for (i = 0; i < len; i++)
        tmp += dataArray[i];
    
    checkSum = (uint8_t)(tmp & 0x000000FF);
    
    checkSum = ~checkSum;

    checkSum += 1;
    
    result = (checkSum == chk) ? 1 : 0;

    return (result);
}

OptimusPrime

Data ve uzunluk 8 bit ise toplam 255x255 e kadar gidebiliyor demektir. Tmp değişkenini 8 bit ile sinirlarsak overflow dan dolayı bu checksum fonksiyonunun farklı data dizileri için aynı degeri hesaplama ihtimali yüksektir. 16 bitlik olmasi daha güzel olur.
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

baran123

Hocam haklısınız.
Benim kullandığım yapıda standart 8 bit olduğu için 8 bit yapım.
Uzunluğa göre düzenlenebilir. :)