当前位置:  开发笔记 > 人工智能 > 正文

这是找到校验和的正确方法吗?

如何解决《这是找到校验和的正确方法吗?》经验,为你挑选了1个好方法。

我正在尝试计算某些数据的校​​验和.这是代码:

#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

为什么修改校验和值?不同的算法会提供不同的校验和吗?

最终价值如何有用?实际上,我不清楚校验和及其在数据验证中的用途.我在网上搜索,发现了很多文章,但仍然不清楚.希望我今天能在这里了解校验和.



1> Paul92..:

在考虑如何生成校验和之前,您需要了解什么是校验和.假设通过不可靠的通信信道(例如网络连接)发送数据的问题.您需要确保没有干扰影响您的消息.

一种方法是将消息发送两次,并检查差异(实际上,在传输两个消息期间发生完全相同的错误的可能性非常小).但是,这需要使用相当多的带宽(发送消息两次).

更有效的方法是根据消息计算值并将其附加到消息中.然后,收件人应用相同的功能并检查值是否相同.

为了获得更直观的示例,书的校验和可以是页数.您从图书馆购买书籍并计算其页数.如果页数不符合您的预期,则会出现问题.

你实现了一个特定的校验和函数(总和的LSB),这很好.所有校验和函数都有一些您应该注意的属性,但重点是没有正确的方法来计算校验和.有许多功能可用于此目的.

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有