将二进制数据附加到c中的文件

时间:2014-02-06 17:07:39

标签: c file io binary append

我在C中打开一个文件并对数据执行CRC32算法。从这里我得到一个校验和,我现在想要附加到文件,以便int的位代码位于文件的bitcode的末尾。但是当我将整数写入文件时,所有数字都被解释为字符,而不是写入int的bitcode。所以我尝试了这个:

    int r, tmp, sum3; 
    for(r = 0; r < 25; r+=8){
        int s;
        sum3 = 0;
        for(s = r; s < r+8; s++){
            tmp = 1;
            int v;
            if(binzahl2[s] == '1'){ //binzahl2 contains the bitcode of the checksum as char array
                for(v = 7; v > s-r; v--)
                    tmp*=2;
                sum3 += tmp;
            }
        }
        int y=fprintf(file, "%c", (char) sum3);
    }

但是当然sum3每次大于127时,转换为char都会出现问题,因此该字节的第一个数字写为0而不是1。

有没有办法解决这个问题,以便在字节的开头写入1? 或者(希望)是否有更好的方法来附加正确的二进制数据?

2 个答案:

答案 0 :(得分:0)

fprintf用于输出格式化数据(这就是最后的f代表的内容)。您想要使用fwrite

答案 1 :(得分:0)

fseek(file, 0, SEEK_END);

fwrite("\n", sizeof(char), 1, file);

char binzahl2[33];
unsinged int checkSum; //some value you have calculated
unsinged int b = 1;

for(i = 31; i > -1 ; i--){
    if( checkSum & (b << i) ){binzahl2[31 - i] = '1';}
    else{binzahl2[31 - i] = '0';}
}

binzahl2[32] = 0;

size_t charCount = strlen(binzahl2);

fwrite(binzahl2, sizeof(char), charCount, file);