c_cpp 对于输入二进制文件中的每个512字节,计算16位校验和并将校验和写为512字节作为第512个字节

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 对于输入二进制文件中的每个512字节,计算16位校验和并将校验和写为512字节作为第512个字节相关的知识,希望对你有一定的参考价值。

#include <stdio.h>
#include <stdlib.h>


#define BUFFER_SIZE 512

int doPadding(char* buffer, int startOffset) {
    int i;
    for(i = startOffset; i<BUFFER_SIZE; ++i) {
        *(buffer+i) = 0xff;
    }
    return 0;
}

char calcCheckSum(char* buffer, int size) {
    int i;
    char sum;
    for(i=0; i<size; i++) {
        sum += *(buffer+i);
    }
    return sum;
}

int main(int argc, char* argv[]) {
    FILE* fin = NULL, *fout = NULL;
    char buffer[BUFFER_SIZE];
    char checksum;
    size_t readed;
    if(argc < 3) {
        printf("need argument.\n");
        exit(-1);
    }

    fin = fopen(argv[1], "rb");
    if(!fin) {
        printf("Input file is not existed.\n");
        exit(-1);
    }
    fout = fopen(argv[2], "wb");
    while((readed=fread(buffer, sizeof(char), BUFFER_SIZE, fin))) {
        printf("readed=%ld\n", readed);
        checksum = calcCheckSum(buffer, readed);
        if(readed<BUFFER_SIZE) {
            doPadding(buffer, readed);
        }
        fwrite(buffer, sizeof(char), BUFFER_SIZE, fout);
        fwrite(&checksum, 1, sizeof(char), fout);
    }
    fclose(fin);
    fclose(fout);
}

以上是关于c_cpp 对于输入二进制文件中的每个512字节,计算16位校验和并将校验和写为512字节作为第512个字节的主要内容,如果未能解决你的问题,请参考以下文章

磁盘分区表备份删除和恢复

磁盘分区表备份删除和恢复

c_cpp 读取文件中的所有字节 - 来自“Linux系统编程”一书

硬盘4k对齐

开篇——给磁盘文件排序

tail 命令