我正在尝试计算某些数据的校验和.这是代码:
#include#include int main() { char MyArray[] = "my secret data"; char checksum = 0; int SizeOfArray = strlen(MyArray); for(int x = 0; x < SizeOfArray; x++) { checksum += MyArray[x]; } printf("Sum of the bytes for MyArray is: %d\n", checksum); printf("The checksum: \n"); checksum = (checksum ^ 0xFF); printf("%d\n",checksum); }
输出:
Sum of the bytes for MyArray is: 70 The checksum: -71
代码中的修改:
#include#include int main() { char MyArray[] = "my secret data"; char checksum = 0; // could be an int if preferred int SizeOfArray = strlen(MyArray); for(int x = 0; x < SizeOfArray; x++) { checksum += MyArray[x]; } printf("Sum of the bytes for MyArray is: %d\n", checksum); //Perform bitwise inversion checksum=~checksum; //Increment checksum++; printf("Checksum for MyArray is: %d\n", checksum); }
输出:
Sum of the bytes for MyArray is: 70 Checksum for MyArray is: -70
为什么修改校验和值?不同的算法会提供不同的校验和吗?
最终价值如何有用?实际上,我不清楚校验和及其在数据验证中的用途.我在网上搜索,发现了很多文章,但仍然不清楚.希望我今天能在这里了解校验和.
在考虑如何生成校验和之前,您需要了解什么是校验和.假设通过不可靠的通信信道(例如网络连接)发送数据的问题.您需要确保没有干扰影响您的消息.
一种方法是将消息发送两次,并检查差异(实际上,在传输两个消息期间发生完全相同的错误的可能性非常小).但是,这需要使用相当多的带宽(发送消息两次).
更有效的方法是根据消息计算值并将其附加到消息中.然后,收件人应用相同的功能并检查值是否相同.
为了获得更直观的示例,书的校验和可以是页数.您从图书馆购买书籍并计算其页数.如果页数不符合您的预期,则会出现问题.
你实现了一个特定的校验和函数(总和的LSB),这很好.所有校验和函数都有一些您应该注意的属性,但重点是没有正确的方法来计算校验和.有许多功能可用于此目的.