我在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? 或者(希望)是否有更好的方法来附加正确的二进制数据?
答案 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);