-2

我對校驗和很陌生,對編程相當陌生。我有一個相當簡單的C++程序(測量psi),我將其轉移到Arduino板上。 crc16會好嗎,或者我應該與crc32一起使用還是會過度殺傷?如何爲簡單的C++程序選擇正確的校驗和,以及如何實現它?

+2

你用什麼校驗和?沒有動機,我們無法回答你的問題。所以請**編輯您的問題**以改善它。 –

+3

如果您的需求需要密碼學強大的摘要,請相信我:不要自己寫。使用一個衆所周知的,測試良好的密碼庫。如果您需要一個簡單的crc32或類似的非加密檢查,您可以編寫它,但老實說,公衆中已經有很多這樣的事情了,我無法想象您需要這樣做。這主要是基於需求的,只有你知道需要你的情況。 – WhozCraig

+0

你確定「準確性」在你的問題中是正確的詞嗎?你的意思是「正確性」嗎? –

回答

0

檢查可執行文件是否已正確傳輸到Arduino主板的一種可能方法是使用簡單的校驗和,如md5,或者甚至更簡單一些,如某些粗糙散列函數計算16位散列。見例如this answer獲得靈感。

0

校驗和出現在不可靠的通信通道中。溝通渠道是一種抽象;位一端走到另一端。一個不可靠頻道只是意味着出來的位不同於進入的位。

現在很明顯,最極端的不可靠通道出現了隨機位。這是無法使用的,所以我們專注於輸入和輸出相關的渠道。

不過,我們有很多不同的腐敗模型。一種常見的模式是每一位P%都可能失敗。另一種常見模型認爲誤碼通常以突發形式出現。然後每個比特有P%的機會開始一個長度爲N的錯誤,其中每個比特有50%可能是錯誤的。還有更多的模型存在,取決於你的問題 - 更先進的模型也考慮到位完全缺失的機會。

正確的校驗和具有非常非常高的檢測模型預測的錯誤類型的可能性,但對其他類型的錯誤可能不適用。

例如,我認爲在互聯網IP層,最常見的錯誤是整個IP數據包丟失。這就是TCP使用序列號來檢測這個特定錯誤的原因。

相關問題