Как я прочитал ровно 128 байт из потока в строковый объект?Как я могу прочитать ровно 128 байт из потока в строковый объект?
Я написал код для чтения первых 128 байт файла и распечатал его, а затем последние 128 байт файла и напечатал это. Последняя часть работает, так как вы можете легко перебирать EOF, но как мне получить ровно 128 байт с фронта? Код ниже не работает, так как вы не можете добавить 128 в итератор ifstream, он не индексируемый, только инкрементный (кажется).
Несомненно, я мог бы сделать итератор и * ++ его 128 раз, но для этого должна быть единственная прямая линия, верно?
#include <iostream>
#include <fstream>
#include <string>
int main(int argc, char **argv)
{
std::ifstream ifs ("input.txt",std::ifstream::in | std::ifstream::binary);
if (ifs.good())
{
// read first 128 bytes into a string
ifs.seekg(0,std::ifstream::beg);
std::string first128((std::istreambuf_iterator<char>(ifs)),
(std::istreambuf_iterator<char>(ifs))+128);
std::cout << first128 << std::endl;
// read last 128 bytes into a string
ifs.seekg(-128,std::ifstream::end);
std::string last128((std::istreambuf_iterator<char>(ifs)),
std::istreambuf_iterator<char>());
std::cout << last128 << std::endl;
return 0;
}
return 1;
}
Как насчет istream :: readsome? – Chubsdad
read/readsome работает только на char * s, и вы не можете получить char * (только const char *) из строкового типа, поэтому вы не можете напрямую читать строковый тип. –