大家好我正在尝试计算我所做的结构的校验和。 我创建了一个包含多个char和int变量的struct数据包。 有没有办法计算这种结构的校验和?
我的第一个猜测是,计算数据包大小,然后使用一个周期来计算每个位置的值,将它们加在一起,然后返回该值。
问题是我不知道如何计算这个数据包的每个位置,因为有多种类型的变量导致它是一个结构。
你有什么建议吗?
答案 0 :(得分:0)
这里需要的是访问结构的每个字节。您可以通过获取其地址,将其转换为unsigned char *
,将地址分配给该类型的变量,然后使用该变量循环遍历字节来实现:
unsigned int sum = 0;
unsigned char *p = (unsigned char *)&mystruct;
for (int i=0; i<sizeof(mystruct); i++) {
sum += p[i];
}
但是请注意,如果你的struct包含任何填充,那么填充字节的值是未指定的,这样就会弄乱你的校验和。如果是这种情况,那么您需要单独为结构中的每个字段执行上述操作。
例如:
unsigned int sum = 0;
unsigned char *p = (unsigned char *)&mystruct.field1;
for (int i=0; i<sizeof(mystruct.field1); i++) {
sum += p[i];
}
p = (unsigned char *)&mystruct.field2;
for (int i=0; i<sizeof(mystruct.field2); i++) {
sum += p[i];
}