2015-11-08 37 views
1

我試圖計算一段數據的校驗和。正如互聯網校驗和算法所說的,它首先將段視爲一個16位整數序列。我的問題是,如何將char * buff類型的數據分解爲16位整數,然後我可以計算總和?將數據段視爲C中的16位整數

+0

'正如算法所說的那樣':你在使用什麼算法,crc函數? –

+0

計算互聯網校驗和 – coder4lyf

+2

你不需要「分開」,你只需要「解釋」。這意味着使用'uint16_t'指針。 –

回答

1

左移位和逐位OR運算符可用於從兩個字符創建一個16位整數。從兩個隨後的字符獲得一個16位整數做:

short tmp; 
tmp = arr[i]; 
tmp |= (arr[i + 1] << 8); 

第二行以上拷貝的第一個字符到16位int TMP。下一行將第二個字符複製到tmp的高字節中。

+1

使用'unsigned short'。使用「short」進行隱式轉換可能會導致符號擴展問題。 – owacoder

相關問題