2013-03-20 42 views
0

檢查字節數組中數據是否正確的最佳方法是什麼?檢查字節數組時出錯

我通過串行連接發送字節數組,例如,byte1,byte2,byte3,byte4和errorCheckByte,並且我希望在收到數據時檢查數據是否正確。

對前四個字節執行的最佳數學運算是什麼,以確定它們在連接的兩端都是相同的?我應該把它們加在一起嗎?

例如,但實際上沒有尋找特定語言的例子,但是這涉及到Java和Arduino的:

byte byte1 = 5; 
byte byte2 = 10; 
byte byte3 = 34; 
byte byte4 = 122; 

byte errorCheckByte = createErrorByte(byte1, byte2, byte3, byte4); 

byte myArray[] = {byte1, byte2, byte3, byte4, errorCheckByte} 

byte createErrorByte(byte byte1,byte byte2, byte byte3, byte byte4) 
{return (byte1 + byte2 + byte3 + byte4);} 

發送,我可以使用下面的或許檢查後?

// Sum bytes received 
byte sumBytes = 0; 
for (int x = 0; x < 3 ; x++) {sumBytes += myArray[x]} 

if (myArray[4] == sumBytes) { // Print message received} 
else { 
    // Discard data 
} 

有沒有更好的但簡單的錯誤檢查算法?

+0

校驗和可能比沒有測試好,但是CRC要好得多。一個簡單的總和不會檢測交換的字節,但CRC會。 – sawdust 2013-03-20 22:52:53

回答

1

你在找什麼是hashing/checksumming的概念。對於少量數據,CRC方法是一種常見選擇,例如CRC32。

+0

是否有可能給出一個示例函數來從4字節的數據中計算出8位的CRC,我已經閱讀過這些文章,儘管這些文章很有用,但我並不擅長用數學來解決這個問題。 – Zac 2013-03-20 16:36:20

+0

@Zac是的,這絕對有可能。爲什麼不穀歌「CRC實施C」? – 2013-03-20 16:36:52