首页 > 解决方案 > 谁能向我解释一下这个程序是如何工作的?

问题描述

我在一个页面中看到了这个程序,我想在我的文档中使用它。特别是在 while 循环的级别

unsigned char calculation(const unsigned char *string)
{
    static uint8_t Value;
    const   uint8_t StartValue = 0;
    Value = StartValue;
    char CRVT[2] = "\r\v";

    strcat((char *)string, CRVT);
    while(*string)
    {
        Value = crc8table[Value ^ *string];
        string++;
    }
    return Value;
}

标签: c

解决方案


发布的代码有相当多的错误,不能按预期工作。假设它应该在行尾添加 CR+VT,CR 表示回车,VT 表示垂直制表符。

但是,该行char CRVT[2] = "\r\v";没有为空终止符分配空间,因此在调用strcat时,程序将崩溃并烧毁。

将 aconst char*转换为char*然后写入它是非常值得怀疑的做法,并且可能会引发定义不明确的行为。

至于Value = crc8table[Value ^ *string];它只是一些CRC表查找,其中一些CRC-8算法具有预先计算的FCS(帧校验序列)值。是^XOR 运算符,在计算 CRC 时使用。作为查表的一部分,它在这段代码中的作用是任何人的猜测。这没有任何意义。

static限定符Value没有任何用途,因为该变量在运行时被重置。

总的来说,我不会使用此代码,因为它的质量如此之低。它不是由专业人士编写的,而是由一些初学者编写的。


推荐阅读