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

时间:2014-12-16 12:59:47

标签: c++ checksum

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

// 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位标头校验和。我对此很陌生,简单的东西足以满足我目前的需求。

1 个答案:

答案 0 :(得分:1)

我不确定您要实现的目标,但要严格回答您的问题,通常会将8位校验和计算为

sum_of_all_elements %255

简单地说,将所有元素添加到一起,总和%255是您的校验和 在进行添加时要注意溢出(如果遇到麻烦,可以计算部分总和)。

另一方面,8位校验和并不是那么好 - 它无法帮助您区分所有情况,也无助于数据恢复;这就是为什么通常首选16位校验和。