我有一个程序,我需要读取二进制文本。我通过重定向阅读了二进制文本:
readData将是我的Makefile生成的可执行文件。
示例:readData< binaryText.txt
我想要做的是读取二进制文本,并将二进制文本文件中的每个字符存储为char数组中的字符。二进制文本由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数组的想法?谢谢!
答案 0 :(得分:0)
我更像是一个C程序员而不是C ++,但我认为你应该已经启动了你的while循环
while(cin.get(&d)){
答案 1 :(得分: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());
答案 2 :(得分: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
来读取字符。
答案 3 :(得分:0)
出现分段错误的原因是,您试图使用字符值访问数组变量。
问题:
buffer[(int)d] //d is a ASCII character value, and if the value exceeds the array's range, there comes the segfault.
如果您想要的是字符数组,那么您已经从cin.read()中获得了它
解决方案:
cin.read(reinterpret_cast<char*>(buffer), length);
如果要打印,只需使用printf
printf("%s", buffer);
我使用reinterpret_cast是因为它认为转换为带符号的字符指针是安全的,因为大多数使用的字符范围是0到127。您应该知道从128到255的字符值将被错误地转换。