在 C++ 中计算 8 位校验和

computing a 8 bit checksum in c++

本文关键字:校验和 计算 C++      更新时间:2023-10-16

我有以下设置,我正在尝试编写自定义文件头。我有描述如下的字段:

// 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位校验和通常是首选的原因。