加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C文件校验和

发布时间:2020-12-16 10:52:29 所属栏目:百科 来源:网络整理
导读:如何使用C制作文件的校验和?我不想使用任何第三方,只是默认的c语言而且速度非常重要(它少了50mb的文件,但无论如何) 谢谢 解决方法 我建议从简单的开始,然后只关注引入快速要求,如果事实证明是一个问题. 在解决不存在的问题上浪费了太多时间(参见YAGNI). 简
如何使用C制作文件的校验和?我不想使用任何第三方,只是默认的c语言而且速度非常重要(它少了50mb的文件,但无论如何)

谢谢

解决方法

我建议从简单的开始,然后只关注引入快速要求,如果事实证明是一个问题.

在解决不存在的问题上浪费了太多时间(参见YAGNI).

简单来说,我的意思是简单地将校验和字符(此处所有字符都是无符号)设置为零,读取每个字符并从校验和字符中减去它,直到达到文件末尾,假设您的实现是智能包装的.

类似于以下程序:

#include <stdio.h>

unsigned char checksum (unsigned char *ptr,size_t sz) {
    unsigned char chk = 0;
    while (sz-- != 0)
        chk -= *ptr++;
    return chk;
}

int main(int argc,char* argv[])
{
    unsigned char x[] = "Hello_";
    unsigned char y = checksum (x,5);
    printf ("Checksum is 0x%02xn",y);
    x[5] = y;
    y = checksum (x,6);
    printf ("Checksum test is 0x%02xn",y);
    return 0;
}

哪个输出:

Checksum is 0x0c
Checksum test is 0x00

校验和功能实际上完成了两项工作.如果你传递一个没有校验和的数据块,它将给你校验和.如果你传递一个带有校验和的块,它会给你一个良好的校验和为零,如果校验和是坏的则为非零.

这是最简单的方法,可以检测大多数随机错误.它不会检测两个交换字符等边缘情况,因此,如果您需要更准确,请使用类似Fletcher或Adler的内容.

这两个维基百科页面都有样本C代码,您可以按原样使用,也可以分析和重新编码,以避免在您担心时出现IP问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读