如何为一个简单的C++程序选择正确的校验和,以及如何实现它
How do I choose the right checksum for a simple C++ program, and how do I implement it?
我对校验和非常陌生,对编程也相当陌生。我有一个相当简单的C++程序(测量psi),我正在转移到Arduino板上。crc16可以吗?我应该用crc32吗?还是太夸张了?
检查可执行文件是否已正确传输到Arduino板的一种可能方法是使用简单的校验和,如md5,甚至更简单的东西,如计算16位哈希的粗略哈希函数。例如,请参阅这个答案以获得灵感。
校验和出现在不可靠通信信道的上下文中。沟通渠道是一种抽象;钻头一端进,另一端出。不可靠通道只是意味着输出的比特与输入的比特不同。
现在很明显,最极端不可靠的信道会产生随机比特。这是不可用的,所以我们将重点放在输入和输出相关的通道上。
尽管如此,我们还是有许多不同的腐败模式。一个常见的模型是,每一位都有P%的可能失败。另一个常见的模型认为,比特错误通常以突发的形式出现。然后,每个比特都有P%的机会开始长度为N的错误,其中每个比特有50%的可能性是错误的。还有相当多的模型存在,这取决于你的问题——更先进的模型也考虑了部分完全丢失的可能性。
正确的校验和检测模型预测的错误类型的可能性非常高,但可能对其他类型的错误不起作用。
例如,我认为对于互联网IP层,最常见的错误是整个IP数据包丢失。这就是TCP使用序列号来检测这个特定错误的原因。
相关文章:
- 如何用尽可能少的数据将数据缓冲区计算为零校验和值
- 计算校验和的逐位运算符
- 如何从存储在 QByteArray 中的十六进制值计算校验和
- 如何在 c++ 中计算对象的哈希/校验和/指纹?
- C++文件传输的校验和算法
- 如何从 IP 校验和字段中计算十六进制值
- 计算句子的校验和(XOR)(由不同变量/类型的组合形成)
- 目录校验和
- 编译后如何计算某些二进制功能(或基本块)的校验和
- PMS5003带有ESP8266-许多校验和错误
- 未正确的校验和释放对象 - 打印时错误
- 将C++校验和函数转换为 Java
- 确定是否使用boost.asio计算UDP校验和
- 校验和CRC 16从C 到Java
- 不同的CRC32校验和同一文件
- Qt,tcp/ip通信校验和
- 正在计算ICMP数据包校验和
- 错误的校验和错误遍布程序
- 如何计算 dmg 文件上的主校验和和数据分叉校验和
- 如何为一个简单的C++程序选择正确的校验和,以及如何实现它