【问题标题】:how to define the polynomial for CRC algorithm?如何定义CRC算法的多项式?
【发布时间】: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,但有时不是。我的计算有问题吗?

标签: java checksum crc


【解决方案1】:

这是g。 24 位 CRC 多项式以 x24 作为最高幂项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-25
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    相关资源
    最近更新 更多