2011-08-15 29 views
2

我試着去創建下列方式二進制文件:如何將二進制數據推送到std :: string?

string buf; 
... 
buf += filename.length(); 
buf += filename; 

等,所以首先我給二進制格式的長度,但我怎麼轉換成4字節的字符數組這一點,或2字節等?基本上我想要實現相同的功能,因爲這將:

int len = filename.length(); 
fwrite(&len, sizeof(len), 1, fp); 

,工作正常,但有它在一個字符串可能會更容易處理。

編輯:我不想使用流,也不是向量,我試圖找出它是否可能與字符串。

回答

4

流是要走的路。不是strings

+1

什麼stringstreams? :-) –

+0

@丹尼爾,所以這不可能與字符串? – Rookie

+0

它不是首選。你使用二進制數據處理,而不是人類可讀的字符串。 –

2

使用的載體,用於保持所述數據,或將其寫入直到該文件(經由流)

2

簡單地使用std:vector<unsigned char>和使用的IStream或ostream的迭代器從載體讀/寫數據到/。例如,從文件中讀取,你可以這樣做:

vector<unsigned char> binary_buffer; 

ifstream in_file("my_binary_file.bin", ios_base::binary | ios_base::in); 
istream_iterator<unsigned char> end_of_file; 
istream_iterator<unsigned char> in_file_iter(in_file); 

while (in_file_iter != end_of_file) 
{ 
    binary_buffer.push_back(*in_file_iter++); 
} 

輸出會更簡單:

ofstream out_file("another_binary_file.bin", ios_base::binary | ios_base::out); 
ostream_iterator<unsigned char> binary_output(out_file); 
copy(binary_buffer.begin(), binary_buffer.end(), binary_output); 
+0

std :: string是二進制保存並可用作字節數組。 –

+2

@Ludger:使用'std :: string'意味着(至少第一眼看到)你想把這樣的數據當作一個文本字符串,而使用'std :: vector '顯然它只是一個二進制blob。 –

+0

@matteo,只是想知道,爲什麼字符串允許二進制數據的所有,如果它永遠不應該以這種方式使用? – Rookie

相關問題