在 C++ 中计算 8 位校验和
computing a 8 bit checksum in c++
我有以下设置,我正在尝试编写自定义文件头。我有描述如下的字段:
// Assume these variables are initialized.
unsigned short x, y, z;
unsigned int dl;
unsigned int offset;
// End assume
u_int8_t major_version = 0x31;
u_int8_t minor_version = 0x30;
u_int_32_t data_offset = (u_int_32_t)offset;
u_int16_t size_x = (u_int16_t)x;
u_int16_t size_y = (u_int16_t)y;
u_int16_t size_z = (u_int16_t)z;
u_int_32_t data_size = (u_int_32_t)dl;
现在,我想做的是从主要修订到data_size变量的字段中计算一个 8 位标头校验和。我对此相当陌生,简单的东西就足以满足我目前的需求。
我不确定您要实现什么,但要严格回答您的问题,8 位校验和通常计算为
sum_of_all_elements %255
简单地说,将所有元素加在一起,总和 % 255 是你的校验和。
执行加法时要注意溢出(如果遇到问题,可以计算部分总和(。
附带说明一下,8位校验和不是那么好 - 它不会帮助你区分所有情况,也无助于数据恢复;这就是为什么16位校验和通常是首选的原因。
相关文章:
- 如何用尽可能少的数据将数据缓冲区计算为零校验和值
- 计算校验和的逐位运算符
- 如何从存储在 QByteArray 中的十六进制值计算校验和
- 如何在 c++ 中计算对象的哈希/校验和/指纹?
- C++文件传输的校验和算法
- 如何从 IP 校验和字段中计算十六进制值
- 计算句子的校验和(XOR)(由不同变量/类型的组合形成)
- 编译后如何计算某些二进制功能(或基本块)的校验和
- 确定是否使用boost.asio计算UDP校验和
- 正在计算ICMP数据包校验和
- 如何计算 dmg 文件上的主校验和和数据分叉校验和
- 在 C++ 中计算 8 位校验和
- 如何计算大文件的 MD5 和 SHA 校验和
- 如何在网络过滤器中重新计算 IP 校验和
- Sqlite 表中的校验和计算
- TCP校验和计算出错
- 计算 400mb >大文件的 sha-1 或 CRC32 校验和
- 计算一个点数的校验和
- 是否有SIMD指令来加速校验和计算
- 计算OSPF中LSA的校验和