c++ - läsa in valfri del av binär fil?
Hej,
Jag håller på att lära mig lite om pcap-filer (https://en.wikipedia.org/wiki/Pcap) och med detta behöver jag skriva ett program som åtminstone kan läsa in hela pcap-filheadern (https://www.ietf.org/archive/id/draft-gharris-opsawg-pcap-01....).
Från vad jag har läst och testat mig till så bör dessa funktioner vara tillämpliga för att läsa in en del av en binär fil till en vector eller array:
Jag vet att testfilen jag har (tcp_1.pcap) har detta "magic number" (i hex-format via hexdump):
d4 c3 b2 a1
Jag letar efter en funktion som ser ut typ såhär (pseudo-kod nedan):
std::vector<unsigned char> to_byte_vector(std::string file_path, int start_index, int num_of_bytes) {
std::vector<unsigned char> result;
std::fstream s{file_path, std::ios::in | std::ios::binary};
//Check if file can be opened.
if (!s.is_open()) {
std::cerr << "Failed to open '" << file_path << "'" << '\n';
} else {
/*Loop eller liknande för att läsa in num_of_bytes bytes från och med start_index
och placera dem i result.
Har ej kommit på den delen.
Kan man använda 's.seekg(start_index)'?*/
if (s.read(reinterpret_cast<char*>(&n), sizeof(n))) {
std::cout << std::hex << std::showbase << n << '\n';
}
}
return result;
}
Anledningen till att jag inte bara läser in hela filen på en gång är att om jag behöver läsa t.ex. en fil som är mycket större än vad RAM tillåter så kommer min kod sannolikt att krascha. Testfilen må vara enbart ett par hundra bytes men jag vill få det rätt från början.
Kan någon hjälpa mig lite på vägen tack? Har suttit ett bra tag och jobbat ensam.