我有一個函數需要在使用流的庫中使用。實際輸入數據是帶有嵌入式空值的無符號字符緩衝區,實際上每個字節可以是0-255之間的任何字符/整數。帶有嵌入式空值的數據流的流處理錯誤
我有庫的源代碼,可以改變它。鑑於字節這樣的流:
0x30, 0xb, 0x0, 0x6, 0x6
如果我使用從字符緩衝區構造一個std :: istringstream流,只要在read_stream功能達到爲0x0,偷看返回EOF ???
當我嘗試將流的內容複製到矢量流時,處理在到達空字符時停止。我怎樣才能解決這個問題。我想將所有的二進制字符複製到矢量中。
#include <vector>
#include <iostream>
#include <sstream>
static void read_stream(std::istream& strm, std::vector<char>& buf)
{
while(strm) {
int c (strm.peek());
if(c != EOF) { // for the 3rd byte in stream c == 0xffffffff (-1) (if using istrngstream)
strm.get();
buf.push_back(c);
}
}
}
int main() {
char bin[] = {0x30, 0xb, 0x0, 0x6, 0x6, 0x2b, 0xc, 0x89, 0x36, 0x84, 0x13, 0xa, 0x1};
std::istringstream strm(bin);
std::vector<char> buf;
read_stream(strm, buf);
//works fine doing it this way
std::ofstream strout("out.bin",std::ofstream::binary);
strout.write(bin, sizeof(bin));
strout.close();
std::ifstream strmf("out.bin",std::ifstream::binary);
std::vector<char> buf2;
read_stream(strmf, buf2);
return 0;
}
編輯:
我現在的embeeded空在流沒有特別的意義認識。所以這個問題必須與istringstream有關。
零字節在流中沒有特別的意義。它們用於C風格的字符串來終止字符串,但二進制流可以包含任何字節。包含多字節字符的文本文件也可能具有零字節,因爲它們是字符的一部分。 – Barmar