2014-10-18 64 views
-5

我讀了一個二進制文件(文件可以是任何東西,如jpg或任何類型的二進制文件,甚至文本文件)。如何讓這些文件返回相同的文件?如何寫入數據位以形成二進制文件?

+1

嗯,只是讀一遍,你做的第一時間的方式相同。 – 2014-10-18 06:34:14

+3

*我一點一點地讀取二進制文件*。不,你沒有 – deviantfan 2014-10-18 06:56:47

+0

你的意思是說「逐字節」,我想,而不是「一點一滴」,你也想在這裏實現什麼?當你說「如何用這些位獲得相同的文件?」時,你的意思是什麼? – parth6 2014-10-18 07:00:23

回答

1

考慮到你的問題有多廣泛,我只是在黑暗中刺傷。假設你閱讀字節文件字節,然後轉換每個字節成位串,你可以使用下面的函數來扭轉這個:

string readBitString(ifstream &stream) 
{ 
    stringstream input; 

    char c; 
    while (stream.get(c)) 
    { 
     for(int i = 7; i >= 0; i--) 
     { 
      input << ((c >> i) & 1); 
     } 
    } 

    return input.str(); 
} 

void writeBitString(ofstream &stream, string input) 
{ 
    stringstream inputStream(input); 

    char bits[9]; 
    char c; 

    while(inputStream.get(bits, 9)) 
    { 
     for(int i = 7; i >= 0; i--) 
     { 
      if(bits[7-i] == '1') 
      { 
       c |= 1 << i; 
      } 
      else 
      { 
       c &= ~(1 << i); 
      } 
     } 

     stream << c; 
    } 
} 

int main() 
{ 
    ifstream in("test.bin", ios::binary | ios::in); 
    ofstream out("test-out.bin", ios::binary | ios::out); 

    string input = readBitString(in); 
    in.close(); 

    writeBitString(out, input); 
    out.close(); 

    return 0; 
}