Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Implementacja i nie tylko przy zapisywaniu danych i ich odczycie ...

Ostatnio zmodyfikowano 2011-07-02 16:03
Autor Wiadomość
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 ):
C/C++
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 ):
C/C++
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
P-35175
pekfos
» 2011-07-02 14:17:23
int w 8 bajtach? prędzej w dwóch. int występuje jako 16 lub 32 bitowy.
P-35178
szyx_yankez
» 2011-07-02 14:34:25
Chyba, że
__int64
.
P-35180
pekfos
» 2011-07-02 14:44:17
to bardziej
long long
 niż
int
.
C/C++
__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.
P-35181
Elaine
» 2011-07-02 15:38:30
int w 8 bajtach?
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
P-35192
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-windows
Systemy 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
P-35200
« 1 »
  Strona 1 z 1