2012-12-03 472 views
1

我有一個程序,我需要讀取二進制文本。我讀通過重定向二進制文本:將二進制文本讀入數組?

READDATA將是我的Makefile文件製作一個可執行文件。

例子:READDATA < binaryText.txt

我想要做的是閱讀的二進制文本,二進制文本文件中的每個字符存儲爲一個字符數組內的字符。二進制文本是由32個這是我這樣做的嘗試...

unsigned char * buffer; 
char d; 
cin.seekg(0, ios::end); 
int length = cin.tellg(); 
cin.seekg(0, ios::beg); 
buffer = new unsigned char [length]; 
while(cin.get(d)) 
{ 
    cin.read((char*)&buffer, length); 
    cout << buffer[(int)d] << endl; 
} 

但是,我不斷收到此分段錯誤。可能任何人有關於如何將二進制文本讀入char數組的任何想法?謝謝!

+1

「二進制文字」? –

+0

我說二進制文本,因爲我不能完全從二進制文件中讀取..但簡單地將二進制文件作爲輸入中的文本到我的程序 – user200081

+0

按照慣例「二進制」和「文本」通常被用作互斥描述文件內容。不是因爲你不能寫一個二進制塊到「文本」文件或純文本字符串爲「二進制」文件,但由於混合模式是很少有用。所以,當你說*「二進制文本文件」*或*「二進制文件內的文本」*,我們正在抓我們的頭。注意:所有文件都以二進制格式存儲,但在「文本」文件中,所有內容都將被視爲文本。 – dmckee

回答

0

我更多的是C程序員,而不是C++,但我認爲你應該已經開始while循環

while(cin.get(&d)){ 
0

最簡單的將是這樣的:

std::istringstream iss; 
iss << std::cin.rdbuf(); 

// now use iss.str() 

或者,全部在一行中:

std::string data(static_cast<std::istringstream&>(std::istringstream() << std::cin.rdbuf()).str()); 
0

這樣的事情應該可以做到。 您檢索參數的文件名,然後讀取整個文件中的一個鏡頭。

const char *filename = argv[0]; 
vector<char> buffer; 

// open the stream 
std::ifstream is(filename); 

// determine the file length 
is.seekg(0, ios_base::end); 
std::size_t size = is.tellg(); 
is.seekg(0, std::ios_base::beg); 

// make sure we have enough memory space 
buffer.reserve(size); 
buffer.resize(size, 0); 

// load the data 
is.read((char *) &buffer[0], size); 

// close the file 
is.close(); 

然後你只需要遍歷vector來讀取字符。