У меня есть программа, в которую мне нужно прочитать двоичный текст. Я читаю двоичный текст через перенаправление:
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;
}
Тем не менее, я продолжаю получать ошибку сегментации по этому вопросу. Может ли кто-нибудь иметь какие-либо идеи о том, как читать двоичный текст в массив символов? Спасибо!
Я больше программист на C, чем на C ++, но я думаю, что вы должны были начать цикл while
while(cin.get(&d)){
Самый простой будет выглядеть так:
std::istringstream iss;
iss << std::cin.rdbuf();
// now use iss.str()
Или все в одну строку:
std::string data(static_cast<std::istringstream&>(std::istringstream() << std::cin.rdbuf()).str());
Нечто подобное должно сработать.
Вы извлекаете имя файла из аргументов, а затем читаете весь файл за один раз.
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
читать символы.