2009-12-09 58 views
0

我解析二進制文件,必須實現CRC算法以確保文件沒有損壞。問題是,我似乎無法在使用更大數字時獲得二進制數學運算。Java:確認方法二進制除法並找到餘數是否正確?

的例子中,我試圖讓工作:

BigInteger G = new BigInteger("11001", 2);
BigInteger M = new BigInteger("1110010000", 2);
BigInteger R = M.remainder(G);

我期待:
R = "0101"

但我得到:
R = "1100"

我假設0101的剩餘部分是正確的,因爲它在本書中用作參考e的CRC算法(它不是基於Java),但我似乎無法得到它的工作。我可以得到一些小的二進制計算,我已經手動解決了這個問題,但不是那些較大的計算。我承認我還沒有用手工處理更大的那個,這是我的下一步,但我想看看是否有人可以指出我的代碼中有一個明顯的缺陷。

任何人都可以確認或否認我的方法是正確的嗎?

謝謝

回答

7

自己算算一下。你的號碼是

G=25 
M=912 
R = 912 % 25 = 12 
R = 1100 (binary) 

看起來像Java是事實上,正在給你正確的答案。 手工做!還有其他的錯...

+0

哇......我不覺得羞怯。 我一直在努力實現這個計劃,只要我認爲我的大腦已經稍微融化了。由於某種原因,我打算在二進制數學中做數學... 無論如何,感謝您的建議。 – rfadams 2009-12-09 08:14:23

2

嗯,1100 = 12. 11001 = 25,1110010000 = 912. 912%25 = 12.所以一切都是公平的。你的書是錯的。

0

CRC適用於多項式,不適用於數字,因此您需要調整數學運算。

0

你的書是正確的。答案是0101.導致差異的原因是CRC二進制除法使用模塊化加法,因此當您減去或添加11100-11001 = 00101而不是00011時,您可以在每個位上執行XOR運算。您可以參考數據通信和Forouzan Chp 10聯網。