2012-12-03 746 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来读取字符。