Implementacja i nie tylko przy zapisywaniu danych i ich odczycie ...
Ostatnio zmodyfikowano 2011-07-02 16:03
Mrowqa Temat założony przez niniejszego użytkownika |
Implementacja i nie tylko przy zapisywaniu danych i ich odczycie ... » 2011-07-02 13:54:51 Witam! Zainteresowałem się ostatnio operacjami na plikach ( zapisywaniu i odczytywaniu ) w trybie binarnym. Konkretnie: w zależności od systemu niektóre typy zmiennych są zapisywane na różnej ilości bajtów ( np. int ). I teraz takie pytanie: jeśli zapiszę jakieś dane do pliku jako binarne, a nie tekstowe ( choć w niektórych systemach to jedno i to samo :D ): ofstream strum( "plik.xyz", ios::out | ios::trunc | ios::binary ); MojaKlasa obiekt; strum.write(( char * ) obiekt, sizeof( obiekt ) );
Potem na innym komputerze, który na innej wielkości przechowuje liczbę wczytam ( aplikacje kompilowane na tym samym komputerze ): ifstream strum( "plik.xyz", ios::in | ios::binary ); MojaKlasa obiekt; strum.read(( char * ) obiekt, sizeof( obiekt ) );
Zakładając, że udało się wczytywanie, to jak postąpi program? Wczyta poprawnie obiekt, czy nawali? Np. komputer A zapisał tam liczbę int na 4 bajtach, a komputer B liczbę int rozpisuje na 8 bajtach. Co wtedy? Program wczyta liczbę na 4 bajty, czy źle postąpi i wczyta na 8 bajtów ?? Wiem - instrukcje są już tam zapisane ( jako instrukcje programu dla procesora ) - ale ja nie wiem jak to tam w środku się dzieje, a bardzo chcę by moje programy były uniwersalne :) Może niektórym zdawać się to banalnym problemem, ale ja się pytam poważnie ( przecież nie wszyscy mają to samo doświadczenie - kiedyś trzeba je zdobyć :) ). Proszę nie usuwać / zamykać tego tematu. Pozdrawiam, Mrowqa |
|
pekfos |
» 2011-07-02 14:17:23 int w 8 bajtach? prędzej w dwóch. int występuje jako 16 lub 32 bitowy. |
|
szyx_yankez |
» 2011-07-02 14:34:25 |
|
pekfos |
» 2011-07-02 14:44:17 to bardziej long long niż int . __int8 intenger = 32; cout << intenger; wyświetli się "32" czy ' '? no oczywiście znak. te typy to bardziej aliasy dla innych niż jakieś samodzielne typy. |
|
Elaine |
» 2011-07-02 15:38:30 Czemu nie? Standard na to pozwala, są platformy, które właśnie taki int mają. Są nawet takie, które mają int wielkości jednego bajtu :P |
|
Mrowqa Temat założony przez niniejszego użytkownika |
» 2011-07-02 16:03:04 @up otóż to miałem na myśli - pisałem, że na innym kompie, gdzie inaczej się koduje liczby. Odnośnie tematu - jak to jest ? Mogę wytłumaczyć bardziej ( postarać się :P ) jeśli chcecie :) PS a o int w ośmiu bajtach to gdzieś czytałem ... ( chyba w Symfonii C++ to pisze :P ). /edit: tak jak myślałem! http://stackoverflow.com/questions/384502/what-is-the-bit-size-of-long-on-64-bit-windowsSystemy i aplikacje 64 bitowe przechowują int'a na 64 bitach :) /edit2: to ktoś co wie czy nie ?? ;/ wprawdzie wyjeżdżam jutro, ale chce wiedzieć jak lepiej się zapisuje dane ... tzn na razie zapisuje to jako tekst, a wolę dane binarne ( ale nie chcę ryzykować ... ). Jak na razie - nie mam jak tego sprawdzić doświadczalnie ... :( Pozdrawiam, Mrowqa |
|
« 1 » |