代码之家  ›  专栏  ›  技术社区  ›  Mohammed Hashayka

二进制/CRC分割余数

  •  0
  • Mohammed Hashayka  · 技术社区  · 6 年前

    我曾尝试创建一个代码来计算Java中CRC错误检测/纠正的剩余部分,但我不知道它与二进制除法有什么区别。

    时间:

        BigInteger G = new BigInteger("1001", 2);
        BigInteger M = new BigInteger("101110", 2);
        BigInteger R = M.remainder(G);
    

    R值为:1
    但当我手动计算CRC余数时,它将是:011

    这里的区别是什么?是否有任何方法或算法来计算CRC余数?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Mark Adler    6 年前

    CRC的余数是 多项式 分开你把被除数和除数的位数当作多项式的系数 Galois Field of two elements (called GF(2)) 。在该字段中,加法变为异或,乘法变为和。1+1是0,而不是2,因为没有2,只有0和1。

    如果你做多项式除法,你应该记得高中的时候,你就会得到答案。只需使用位即可轻松完成GF(2):

              101
          --------
    1001 / 101110
           1001
           ------
             1010
             1001
             ----
               11
    

    所以我们得到了商 101 和余数 11