2014-07-04 32 views
2

我想通過嘈雜的通道傳輸二進制數據。如何應用在C#中使用zxing的Reed-Solomon算法

我讀到一個很好的檢測錯誤的ECC算法是Reed-Solomon。 問題是我不明白這個算法的輸入。

這裏是我天真的失敗嘗試與zxing.net:

int[] toEncode = { 123,232,432}; 
var gf = GenericGF.AZTEC_DATA_12; 
ReedSolomonEncoder rse = new ReedSolomonEncoder(gf); 
rse.encode(toEncode, 2); 

ReedSolomonDecoder rsd = new ReedSolomonDecoder(gf); 
rse.encode(toEncode, 2); 

請向我解釋了編碼器和解碼器的輸入。

回答

2

這是你在這裏使用的實現:ReedSolomonEncoder.cs?如果是這樣,要用M個數據校正整數編碼N個整數,則需要傳遞一個長度爲N + M的數組。您的數據應該位於前N個索引中,並且代碼將在最後的M個條目中添加到末尾。

此外,請注意在編碼器下列限制:

更新:更新的版本是在這裏:http://zxingnet.codeplex.com/。它的最新版本ReedSolomonEncoder.cs沒有這個限制。

該類實現用於處理QR codes的Reed-Solomon編碼方案。 Reed Solomon編碼的簡要說明如下:Reed-Solomon Codes

「QR_CODE_FIELD_256」的編碼選擇(可能是您合理的選擇)意味着您的消息的字節大小的塊(「符號」)上正在生成糾錯碼,這意味着您的最大消息長度數據編碼加糾錯碼)長度爲255個字節。如果你發送更多的數據,你需要把它分成幾塊。

更新2:使用QR_CODE_FIELD_256,你的整數也需要在0到255之間,所以要編碼一個普通的字節流,你需要把每個字節放到整數數組中的一個單獨的整數中,通過int數組加上錯誤糾正碼的空間)通過編碼器,然後重新轉換爲(更大的)字節數組。而解碼的反面。

+0

是的,謝謝!你能解釋一下這個限制的含義嗎?我不知道我需要什麼領域。我只知道我有不同長度的字節數組來傳輸。 – flyman