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 命令