2014-02-06 75 views
0

我用C打開一個文件並對數據執行CRC32算法。從這裏我得到一個校驗和,我現在要附加到文件中,以便int的位代碼位於文件的位代碼的末尾。但是,當我將整數寫入文件時,所有數字都被解釋爲字符,而不是寫入int的位碼。所以,我想這一點:將二進制數據附加到c中的文件

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

文件輸入和需求文件輸出的例子將有助於澄清您的問題和目標。 – chux

+0

輸入只是一個類似「這是一個測試」的.txt文件。輸出並不重要,它沒有任何意義。將整數的位代碼附加在文件的位代碼末尾非常重要,以便我可以再次運行crc32算法並檢查一切是否正確。 –

回答

0

fprintf用於輸出格式化數據(這就是最後的f代表)。您想用fwrite代替。

+0

我已經嘗試了fwrite,但是像我之前提到的那樣存在相同的問題:我寫入文件的所有內容都被解釋爲char,並且附加了錯誤的位代碼 –

+0

您能用不同的詞來表達嗎?什麼是「位碼」?字節數據?如果是這樣,那麼這就是文件包含的一串字節。在你的其他評論中,「整數的位碼附加在文件的位碼末尾」,同樣,文件是字節串。一個字節是一個介於0和255之間的數字。 – Blindy

+0

例如當文件看起來像這樣當我打印的每一位:10001000110000101110011001000000110100101110011011101000010000001100101011010010110111000100000010101000110010101110011011101000010111000110011001110010011000100110001001101100011001000110010001100100和校驗和是這樣的:00000010010101001101110110111110 我要校驗追加末 –

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); 
+0

我已經試過了,但是當我將它寫入文件時,數字會被解釋爲字符,並且它又錯了 –

+0

@RamonaViktoria查看我的編輯 –

相關問題