2013-09-26 57 views
1

我在字節數組上生成了一個CRC整數,並將它轉換爲4字節數組。我使用this類爲CRC16使用生成多項式= 0x1021;這意味着1 + x + x^5 + x^12 + x^16 我發送我的字節數組和CRC通過UDP到服務器。在服務器端,我喜歡檢查字節數組是否正確傳輸。據我瞭解,我可以通過生成多項式來分割與crc-array連接的數據數組。我理解了嗎?以及如何在Java中使用生成多項式執行data+crc除法?Java執行crc檢查(按字節數組劃分字節數組)

我見過的解決方案只是在數據上再次生成crc代碼,並比較是否生成的crc代碼是相同的,但這可能是crc代碼所做的。

+0

重新計算CRC和比較是最簡單的事情。 –

+0

順便說一句,您的檢查是不必要的,因爲UDP確保byte []將與UDP發送數據報之前使用校驗和進行自己的檢查一樣發送。 – markmnl

+0

這是更多的教育理由,然後一個真正的用例,但會很好,如果你有一個參考這個聲明;) – abimelex

回答

0

CRC旨在讓您重複CRC計算,但將CRC字節添加到數據字節中。從Wikipedia

接收的消息的有效性可容易地通過具有添加的,而不是零檢查值再次執行上述 計算,此時進行驗證。如果沒有可檢測到的錯誤,其餘的 應該等於零。

+1

這隻有在CRC沒有預處理或後處理時纔有效,其中大部分都是這樣。通常的做法是用任何校驗算法來做你想做的事情,它只根據接收到的消息進行計算,並將其與接收到的校驗值進行比較。 –

+0

因爲我的代碼在計算校驗和後做了修改[crc&= 0xffff;]我需要按照你說的方式去做,但接受上面的答案。 – abimelex

+0

@MarkAdler如果CRC有預處理或後處理,它怎麼可能是一個有用的檢查?我對這些類型的檢查(CRC,奇偶校驗)的理解是,您只需計算整個接收到的消息(包括校驗位)並確保結果爲0. – ford