2013-05-01 72 views
1

我對CRC,新手和更多的Java開發人員都很陌生。我正在嘗試使用crc.hpp boost庫創建一個僅基於兩位計算的6位crc。首先這是可能的?使用boost創建一個6位crc

似乎理論CRC計算機可以用來處理特定數量的位,但我不清楚如何指定6位結果。請幫助。

+3

爲什麼你的結果比你的輸入大? – 2013-05-01 16:49:23

+0

同意一種不尋常的。不過,我只是遵循msg類型的標題規範。我質疑它,並被告知我們無法改變這個價值。 – user1464251 2013-05-01 18:42:18

+0

此評論徹底改變了這個問題。你不是在計算6位的CRC。這聽起來像需要計算標頭規範所要求的6位CRC。有許多可能的6位CRC,具有不同的多項式,初始化值,後處理,輸入位排序和輸出位排序。那麼說明書說什麼? – 2013-05-01 22:35:40

回答

2

假設你的輸入是基於2位的實際,而不是兩個字節,這應該工作:

const int initial_remainder = 0xBAADF00D; 

unsigned char input = 0x3; 

boost::crc_basic<6> checksum(initial_remainder); 
checksum.process_bits(input, 2); 

printf("%i", checksum.checksum()); 

你仍然需要弄清楚初始其餘應該是什麼,但。

+0

是的兩位不是字節,讓我一起去吧。謝謝! – user1464251 2013-05-01 17:04:01

+0

此代碼功能,但我的校驗和結果似乎不正確。我得到單個字符的結果或根本沒有。也許我仍然錯過了一些東西。 – user1464251 2013-05-01 19:30:43

+0

@ user1464251除非您給我們預期的結果,否則我們無法完全回答。您的初始餘數完全可能不正確,導致此問題。 – 2013-05-01 19:39:41

3

這應該只是一個自定義代碼,它可以最大化四個字節值之間的漢明距離。它將是一個由兩位索引的4個8位值作爲0..3中數字的表格。

使四個值中的任意兩個之間的最小漢明距離最大化的一組值(有280個這樣的組)是:0x00, 0x4f, 0xb3, 0xfc。最小漢明距離是5.這些值的高兩位是按順序的兩位索引。

+0

我不確定我完全理解你在說什麼。我瞭解海明距離概念。由於我只關注2比特,所以5的海明距離超過了我的要求,好。 我不明白你說'四個字節值'之間的意思。爲什麼四個字節?我很清楚索引它們。 另外,你是如何獲得280套這樣的套件的? – user1464251 2013-05-01 19:25:36

+0

2位有四個可能的值。您映射到8位值(表示爲2位數據加上6位CRC),因此映射到四個字節。 – 2013-05-01 21:37:25

+0

蠻力搜索變成280個有序集合,第一個字節爲零。您可以排除所有具有相同值的字節,以獲得具有相同漢明距離的其他集合,因此確實有更多集合。無論如何,你只需要一套。 – 2013-05-01 21:38:30