我在页面中看到了此程序,我想在我的文档中使用它。尤其是在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;
}
答案 0 :(得分:2)
发布的代码有很多错误,无法按预期工作。应该在行尾添加CR + VT,CR表示回车,VT表示垂直制表符。
但是,行char CRVT[2] = "\r\v";
没有为空终止符分配空间,因此调用strcat
时,程序将崩溃并燃烧。
将const char*
投射到char*
并写到它是一个非常值得商practice的做法,并且可能会导致定义不明确的行为。
对于Value = crc8table[Value ^ *string];
,它只是一些CRC表查询,带有针对某些CRC-8算法的预先计算的FCS(帧校验序列)值。 ^
是XOR运算符,在计算CRC时使用。任何人都在猜测,作为查表的一部分,此代码中的功能。没有任何意义。
static
的{{1}}限定符没有任何作用,因为该变量在运行时被重置。
总体而言,我不会使用此代码,因为它的质量很低。它不是由专业人士撰写的,而是一些初学者撰写的。