Witam.
Otóż zgłębiam wiedzę na temat edycji plików binarnych i ciekawi mnie poniższy przypadek.
Napisałem przykładowy kod, który zapisuje string "Sample" do pliku w postaci binarnej:
void saveToFile(const char* filename, string& data, bool binaryMode = false);
int main() {
string filename = "test.bin";
string text = "Sample";
saveToFile(filename.c_str(), text, true);
}
void saveToFile(const char* filename, string& data, bool binaryMode) {
ofstream pFileHandler;
pFileHandler.open(filename, binaryMode ? ios::binary : ios::out);
if (pFileHandler) {
pFileHandler.write(data.c_str(), sizeof(data));
pFileHandler.close();
}
}
A tutaj jest wizualna reprezentacja tego pliku:
Offset zaznaczony na zielono to mój string "Sample" wraz ze znakiem końca linii. Żółty offset reprezentuje rozmiar tego stringa w postaci 4 bajtowego inta. Co znajduje się pod offsetem 0x14 - 0x17? Co oznacza CC? Dlaczego w ogóle występuje reszta tego śmiecia? Dlaczego łączny rozmiar pliku to 28b, a nie 11b (długość stringa (7b) + informacja o jego rozmiarze (4b))? Gdy zapiszę do pliku zwykłego inta o wartości powiedzmy 10 to zapisany zostaje tylko ten int (4 bajty). Tak samo jest z char.
Czy ktoś może mi to KOMPLEKSOWO wyjaśnić?
Z góry dziękuję.