输入数据的CRC短于多边形宽度

时间:2018-08-27 09:31:31

标签: vba crc

在研究用VBA在Excel中实现CRC的过程中,我正在撰写论文。 我创建了一个使用Ross parametrized model的相当简单的模块化算法。 它对任何长度的多项式和参数的任何组合都可以完美地工作,除了一个。当输入数据的长度短于多项式的宽度并且时,将选择一个初始值(“ INIT”),该初始值将设置任何“过去”输入数据长度的位。

示例:

private Bitmap viewToBitmap(LinearLayout layout) {
        Bitmap bitmap = Bitmap.createBitmap(layout.getWidth(), layout.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        layout.draw(canvas);
        canvas=new Canvas(bitmap);
        Paint paint = new Paint();
        paint.setColor(Color.BLACK);
        paint.setAntiAlias(true);
        paint.setTextSize(14.f);
        paint.setTextAlign(Paint.Align.CENTER);
        canvas.drawText("Hello Android!", 0, 0, paint);
        return bitmap;
    }

如果我没有选择INIT或任何0x ## 00之类的INIT,则得到的校验和与任何在线CRC生成器相同。如果设置了最后两个十六进制字符中的任何一位(例如0x0001),则我的结果无效。

我相信问题可以归结为“如果对于两个字节的INIT参数仅存在一个字节的输入数据,该寄存器如何初始化?”

1 个答案:

答案 0 :(得分:0)

事实证明,我被误导了(或者我很可能误解了)sunshine2k网站上有关如何使用INIT参数的解释。 INIT值本身不得与前 n 个输入字节进行异或( n 是寄存器/裁剪后的多边形/校验和的宽度),而只能与INIT值进行异或在将 n 0位附加到输入数据之后。 当输入数据等于或大于 n 个字节时,此规范无关紧要,但是当输入数据太短时,则无关紧要。