2016-04-13 58 views
0

在我的項目中,我需要寫入二進制文件順序無符號整數,重要的是每個數字需要精確的4個字節。 但是,當我用十六進制編輯器打開二進制文件,我看到這個奇怪的事情發生: 數字寫入正確的數字9;在編號10之前,他會添加另一個額外的字節並寫入'13'(並且已經與我的文件混淆了)。 奇怪的事情繼續發生 - 從30號開始,將寫入不同的字符,每個號碼旁邊。 這是爲什麼?如何解決,至少是尺寸問題? 這裏是我的簡單示例代碼:無法正確寫入大型無符號整數到二進制文件 - C++

int main() 
{ 
    string filename; 
    cin >> filename; 
    fstream mystream; 
    mystream.open(filename, ios::out); 
    if (mystream) 
     for (unsigned int i = 0; i < 3200; i++) 
      mystream.write((char*)&i, sizeof(unsigned int)); 
    mystream.close(); 

    return 0; 
} 

,並連接的是我在文件中看到的圖像: file capture on hex editor

感謝

+0

在全局namespae中定義'void main()'在標準C++中是非法的。你應該使用標準的'int main()'。 – MikeCAT

+0

沒錯。我會糾正它; –

回答

1

數量10是一個換行符LF,它被轉換爲CRLF,因爲文件在文本模式下打開。

以二進制模式打開文件來處理二進制文件。

#include <iostream> 
#include <fstream> 
#include <string> 

using std::string; 
using std::cin; 
using std::fstream; 
using std::ios; 

int main() 
{ 
    string filename; 
    cin >> filename; 
    fstream mystream; 
    mystream.open(filename, ios::out | ios::binary); // add OR with ios::binary 
    if (mystream) 
     for (unsigned int i = 0; i < 3200; i++) 
      mystream.write((char*)&i, sizeof(unsigned int)); 
    mystream.close(); 
} 
相關問題