checksum += (0x000000FF) & *a++; 以及 *( (unsigned int *)a ) = checksum; 的理解
阿新 • • 發佈:2018-12-10
checksum += (0x000000FF) & *a++; 的理解
a = Buf + SPL_HEADER_SIZE;
for(i = 0, checksum = 0; i < IMG_SIZE - SPL_HEADER_SIZE; i++)
checksum += (0x000000FF) & *a++;
//校驗和演算法其實就是需要校驗的記憶體區域中,所有記憶體中的內容【按照位元組為單位來進行相加】,最終相加的和極為校驗和。
因為+=的優先順序排第14,所以可以分步理解如下:
第一步:checksum = checksum+ (0x000000FF) & (*a)
第二步:a += 1; //相當於指標向後移動了一個單位。
第三步:checksum = checksum+ (0x000000FF) & (*a)
第四步:a += 1; //相當於指標再一次向後移動了一個單位,前面兩步如此迴圈下去,直到迴圈條件不滿足為止
*( (unsigned int *)a ) = checksum; 的理解
現將a強制型別轉換為(unsigned int *)型,然後把(unsigned int *)a當做一個整體,也就是一個指向無符號整型的指標變數a。*( (unsigned int *)a )表示這個指向無符號整型的指標變數a所指向的變數。
所以,*( (unsigned int *)a ) = checksum表示的意思是,將檢驗和checksum的值賦給指向無符號整型的指標變數a所指向的變數。
如果把左值與右值比喻成房子與家人,那麼指向無符號整型的指標變數a所指向的變數就代表“房子”, checksum就好比住進房子中的家人。