fstream binary rozmiar pliku
Ostatnio zmodyfikowano 2015-02-08 22:34
__NAME__ Temat założony przez niniejszego użytkownika |
fstream binary rozmiar pliku » 2015-02-08 14:01:35 Witam,
Chcę odczytać z pliku najpierw 3 floaty, potem size_t, a następnie size_t rozmiar oraz tyle size_t ile wynosi rozmiar. Problem polega na tym, że nie wiem ile charów (bajtów) zarezerwować oraz jak właściwie te chary zrzutować na potrzebne mi typy danych. |
|
krecik1334 |
» 2015-02-08 14:40:07 użyj jakiejś dynamicznej tablicy wtedy rozwiążesz problem z liczbą charów |
|
pekfos |
» 2015-02-08 14:55:01 Problem polega na tym, że nie wiem ile charów (bajtów) zarezerwować |
Rozmiar masz zdaje się odczytać z pliku, a 'nagłówek' pliku ma stały rozmiar. Rezerwowanie pamięci na cały plik nie ma żadnego sensu. jak właściwie te chary zrzutować na potrzebne mi typy danych. |
Odczytuj od razu do zmiennych właściwych typów. |
|
__NAME__ Temat założony przez niniejszego użytkownika |
» 2015-02-08 21:22:56 Mam taki konstruktor: Point::Point( string s ) { dimensions.clear(); path = s; fstream f; f.open( path.c_str(), ios::in | ios::binary ); if( !f.good() ) { f.close(); f.open( path.c_str(), ios::out ); f.close(); f.open( path.c_str(), ios::in ); } char * buffer = new char[ sizeof( float ) ]; f.read( buffer, sizeof( float ) ); x = *( float * ) buffer; f.read( buffer, sizeof( float ) ); y = *( float * ) buffer; f.read( buffer, sizeof( float ) ); z = *( float * ) buffer; delete[] buffer; buffer = new char[ sizeof( size_t ) ]; f.read( buffer, sizeof( size_t ) ); tag = *( size_t * ) buffer; f.read( buffer, sizeof( size_t ) ); size_t n = *( size_t * ) buffer; delete[] buffer; f.close(); }
Zmienna n powinna mieć wartość 1, a jest bardzo duża. Powinna wynosić 1, ponieważ wpisałem tam " ˘", co odpowiada charom o numerach 0, 0, 0 i 1. |
|
Monika90 |
» 2015-02-08 22:34:32 0 0 0 1 to powinno być 16777216 lepiej zrób co Ci napisał pekfos Odczytuj od razu do zmiennych właściwych typów. |
Poniższy kod jest prawdopodobnie poprawny, używaj na własne ryzyko std::uint32_t size = 0; if( f.read( reinterpret_cast < char *>( & size ), sizeof( size ) ) ) { dimensions.resize( size ); f.read( reinterpret_cast < char *>( dimensions.data() ), sizeof( dimensions[ 0 ] ) * size ); }
|
|
« 1 » |