【发布时间】:2016-08-26 23:59:21
【问题描述】:
我写了一个计算CRC24校验和的代码:
public String CRC24Q(String str){
String devisor = "1100001100100110011111011";
String augmented = str + appendZeroes("0", 23);
StringBuilder checksum = new StringBuilder();
String tmp = augmented.substring(0, 24);
for (int j = 0; j < devisor.length()-1; j++){
if (tmp.charAt(j) == devisor.charAt(j)){
checksum.append('0');
} else {
checksum.append('1');
}
}
for (int i = 24; i < augmented.length()-1; i++){
tmp = checksum.toString().substring(1) + augmented.charAt(i);
checksum.setLength(0);
for (int j = 0; j < devisor.length(); j++){
if (tmp.charAt(j) == devisor.charAt(j)){
checksum.append('0');
} else {
checksum.append('1');
}
}
}
return checksum.toString();
}
但是我在定义多项式时遇到了问题。 我根据某个文档中提供的说明定义了它:
我的多项式应该是小p还是g? 谢谢你的帮助。
【问题讨论】:
-
不是专家,但根据我对维基百科文章的理解:en.wikipedia.org/wiki/Polynomial_code g 是多项式,p 只是不可约形式。所以 g(X) 形式就是你所需要的,剩下的只是解释他们是如何得到这个等式的。
-
g(X) 就是你想要的!
-
好的,另一件事。我正在尝试检查我的计算是否正确。因此,在计算校验和后,我将其添加到原始字符串并再次计算,而无需再次填充消息。校验和应该为 0,但有时不是。我的计算有问题吗?