c - 谁能向我解释一下这个程序是如何工作的?
问题描述
我在一个页面中看到了这个程序,我想在我的文档中使用它。特别是在 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;
}
解决方案
发布的代码有相当多的错误,不能按预期工作。假设它应该在行尾添加 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
没有任何用途,因为该变量在运行时被重置。
总的来说,我不会使用此代码,因为它的质量如此之低。它不是由专业人士编写的,而是由一些初学者编写的。
推荐阅读
- java - Netbeans 8.0.2 安装本机库错误
- excel - 取消保护工作表,保护一些单元格并保留其他单元格
- java - 我是否应该在 Spring 中手动重置 Autowired Bean 的状态数据(因为它是单例)?
- python - Theano 梯度扫描操作失败
- javascript - onreadystatechange 和 onload 的区别
- google-cloud-platform - 组织超级管理员不允许在组织内创建文件夹
- c# - 使用 MVVM 的 DataTemplate ListBox 绑定和触发器中的 CheckBox
- firebase - gcloud 运行 & Firebase Admin SDK
- typescript - 使用动态导入时玩笑与自定义错误类型不匹配
- domain-driven-design - 添加跨两个聚合的域服务的解决方案中的哪个项目?