你好,我想要做的是扭轉一個二進制文件。例如,如果通道號是2,每個樣本的位數是16,則每次我將複製32/8 = 4個字節時,文件的類型都是wav。第一個想要做的就是複製標題(這部分是可以的),然後反轉他的數據。我已經創建了一個代碼來複制標題,然後從最後10次結束部分數據(用於測試),但不是複製40個字節,而是由於某種原因停止在20(即使它會做20次它會仍然只複製20個字節)。這是這樣做的代碼。我不能看出錯誤了,如果你能看到它告訴我:)也許錯誤是別的地方,所以我寫的全功能fread fwrite fseek in C
void reverse(char **array)
{
int i=0;
word numberChannels;
word bitsPerSample;
FILE *pFile;
FILE *pOutFile;
byte head[44];
byte *rev;
int count;
if(checkFileName(array[2]) == 0 || checkFileName(array[3]) == 0)
{
printf("wrong file name\n");
exit(1);
}
pFile = fopen (array[2] ,"r");
fseek(pFile, 22, SEEK_SET);//position of channel
fread(&numberChannels, sizeof(word), 1, pFile);
fseek(pFile, 34, SEEK_SET);//position of bitsPerSample
fread(&bitsPerSample, sizeof(word), 1, pFile);
count = numberChannels * bitsPerSample;
rewind(pFile);
fread(head, sizeof(head), 1, pFile);
pOutFile = fopen (array[3] ,"w");
fwrite(head, sizeof(head), 1, pOutFile);
count = count/8;//in my example count = 32 so count =4
rev = (byte*)malloc(sizeof(byte) * count);//byte = unsigned char
fseek(pFile, -count, SEEK_END);
for(i=0; i<10 ; i++)
{
fread(rev, count, 1, pFile);
fwrite(rev, count, 1, pOutFile);
fseek(pFile, -count, SEEK_CUR);
}
fclose(pFile);
fclose(pOutFile);
}
是,這是一個很大的mistake..i做了總和=計數和爲我做總和=總計+計數 –